信息加密
题目背景
世界的全球化与科技进步离不开网络的普及。然而,普惠万家的网络也可能成为违法犯罪的温床。如果使用网络时不进行恰当的加密和保密,就等同于在大街上裸奔,个人信息将被不法分子窃取。即使对传输的信息进行了充分的保护,内容在传输过程中仍然可能被黑客干扰和损坏。
我国明确规定,个人的通信自由和秘密受法律保护。在各机构、组织与机关的配合下,我们接触到的网络世界已经有了高高的围墙。但即使有了较为完善的保护措施,我们仍需谨慎触网、恰当上网。
题目描述
在本题中,所有信息都可以由 表示,意思是该信息的长度为 ,价值为 。这些信息具有可加性。将两个信息 拼接在一起,会得到信息 。
相传有一个比较好的加密方式就是,把想要传输的数据复制两份,然后在将它们断开成若干段,之后加入一些干扰数据,分别发送过去。当对方接受之后,只需要找出能用两种方式拼出来的数据,就可以还原出发送者的意图。
具体的,假设我们有一个想要传输的信息 ,我们找到两组 $(l_i, v_i)_{i = 1, \dots, n}, (l'_j, v'_j)_{j = 1, \dots, m}$,满足这 个 拼接得到 ,这 个 拼接得到 。之后,我们再添加 个干扰项 (可以是任意信息),最后将所有 个信息一同发送。
然而,你作为信息的接收者,你怀疑数据遭到了黑客的干扰,导致无法选出两组 来还原出 。所以你需要编写一个程序来判断是否遭到了黑客干扰。
如果你不能还原出 ,则输出 yes
,说明遭到了干扰。否则,输出 no
,并且还原出一个恰当的 。
输入格式
第一行一个正整数 ,表示你接收到的信息的数量。
接下来 行,每行两个整数 ,表示你接收到了一条长度、价值分别为 的信息。
输出格式
第一行一个字符串。若遭到了干扰导致信息无法还原,输出 yes
。若没有被攻击并且能够还原,输出 no
。
如果能够还原,你还要给出构造。具体的,你需要输出两行,每一行表示一个 的组成方案。
在一个组成方案中,你需要先输出 ,表示该方案使用的信息个数。后面再接 个整数,表示信息对应的编号(输入中的顺序)。
你需要保证两个组成方案能得到相同的 ,并且,同一条信息不能同时出现在两个组成方案中。
如果有多种解法,可以输出任意一种,毕竟传达的信息可能会有多种意思。
样例
5
1 -3
1 1
2 -1
3 1
3 2
no
2 3 4
3 1 2 5
3
1 1
2 2
3 -3
yes
说明/提示
对于第一个样例,信息可以由 两种方案组成,说明没有遭到黑客的干扰。两种方案对应的编号为 。
对于第二个样例,我们无法用两种方法组成相同的 ,说明遭到了黑客的干扰,输出 yes
。
对于所有的数据,。单个信息的长度 满足 ,信息的价值 满足 。
注意信息的价值可能为负。
国庆提高/省选组比赛
- Status
- Live... (Attended)
- Rule
- IOI
- Problem
- 40
- Start at
- 2025-10-15 19:32
- End at
- 2025-11-16 0:00
- Duration
- 1104 hour(s)
- Host
- Partic.
- 85