4104: [Thu Summer Camp 2015]解密运算
来源:互联网 发布:咸鱼不退不换淘宝介入 编辑:程序博客网 时间:2024/06/05 10:19
4104: [Thu Summer Camp 2015]解密运算
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 422 Solved: 274
[Submit][Status][Discuss]
Description
对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符”.”。之后将字符串视为一个环,从位置1,2,3,…,N+1为起点读出N+1个字符,就能得到N+1个字符串。
比如对于字符串“ABCAAA”,我们可以得到这N+1个串:
ABCAAA.
BCAAA.A
CAAA.AB
AAA.ABC
AA.ABCA
A.ABCAA
.ABCAAA
接着我们对得到的这N+1个串按字典序从小到大进行排序(注意特殊字符“.”的字典序小于任何其他的字符)结果如下:
.ABCAAA
A.ABCAA
AA.ABCA
AAA.ABC
ABCAAA.
BCAAA.A
CAAA.AB
最后,将排序好的N+1个串的最后一个字符取出,按照顺序排成一个新的字符串,也就是上面这个表的最后一列,就是加密后的密文“AAAC.AB”。
请通过加密后的密文求出加密前的字符串。
Input
第一行有两个整数N,M,分别表示加密前的字符串长度和字符集大小,其中字符用整数1,2,3,…,M编号,添加的特殊字符“.”用0编号。
第二行为N+1个整数,表示加密后的字符串。
Output
输出仅一行,包含N个整数,用空格隔开,依次表示加密前字符串中每个字符的编号。
Sample Input
6 3
1 1 1 3 0 1 2
Sample Output
1 2 3 1 1 1
HINT
i (i=1~4) N=5*(i+1) M<=3
5~6 N,M<=50 字符串中字符互不相同
7~8 N,M<=1000 字符串中字符互不相同
9~12 N,M<=1000
13~20 N,M<=200000
Source
鸣谢佚名上传
[Submit][Status][Discuss]
挺需要思考的一道题(反正想不出来。。。)
每个字符串都是后缀 + 句点 + 前缀的格式
显然这N+1 个数字是远串中每个位置的数字各出现一次拼出来的
记si 为原串中以i 开头的后缀
对于给出的数字串,按照权值为第一关键字,位置为第二关键字排序
那么排序后,第一关键字连起来读,显然就是(N+1)∗(N+1) 矩阵的第一列
假设排序后第x 个二元组的第一关键字在原串中的位置为y
那么第二关键字就说明sy+1 在所有后缀中的排名为x
考虑数字0 所在二元组的第二关键字,设为k
那么这些二元组中第k 大的第一关键字显然就是原串的第一位了
类似的就能找出第二位第三位…
那么剩下的像这样扫描一圈就全部出来了
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define fr first#define sc second#define mp(a,b) (make_pair((a),(b)))using namespace std;const int maxn = 2E5 + 2;typedef pair <int,int> pr;int n,m;pr A[maxn];inline int getint(){ char ch = getchar(); int ret = 0; while (ch < '0' || '9' < ch) ch = getchar(); while ('0' <= ch && ch <= '9') ret = ret * 10 + ch - '0',ch = getchar(); return ret;}int main(){ #ifdef DMC freopen("DMC.txt","r",stdin); #endif n = getint(); m = getint(); for (int i = 1; i <= n + 1; i++) A[i] = mp(getint(),i); sort(A + 1,A + n + 2); int pos = 1; for (int i = 1; i <= n; i++) { pos = A[pos].sc; printf("%d ",A[pos].fr); } return 0;}
- 4104: [Thu Summer Camp 2015]解密运算
- BZOJ4104 [Thu Summer Camp 2015]解密运算
- BZOJ 4104 [Thu Summer Camp 2015]解密运算
- bzoj 4104: [Thu Summer Camp 2015]解密运算
- bzoj 4104: [Thu Summer Camp 2015]解密运算 乱搞
- BZOJ 4104: [Thu Summer Camp 2015]解密运算
- 【bzoj4104】[Thu Summer Camp 2015]解密运算 乱搞
- [BZOJ4105][Thu Summer Camp 2015]平方运算
- 4103: [Thu Summer Camp 2015]异或运算
- bzoj4103[Thu Summer Camp 2015]异或运算
- bzoj 4103: [Thu Summer Camp 2015]异或运算
- BZOJ 4103: [Thu Summer Camp 2015]异或运算
- BZOJ 4105: [Thu Summer Camp 2015]平方运算
- 4103: [Thu Summer Camp 2015]异或运算
- BZOJ 4103 [Thu Summer Camp 2015]异或运算 可持久化Trie
- 【bzoj4103】 【Thu Summer Camp 2015】【异或运算】【可持久化trie】
- 【BZOJ 4103】[Thu Summer Camp 2015]异或运算 可持久化trie树
- bzoj 4103: [Thu Summer Camp 2015]异或运算 可持久化trie
- 单链表的冒泡排序
- 怎么使用EL调用函数
- 计数器
- JAVA中toString()方法的用处
- stat
- 4104: [Thu Summer Camp 2015]解密运算
- POJ1222-EXTENDED LIGHTS OUT
- post和get请求方式以及区别
- Hadoop安装调试
- 24 分析第一个C语言程序
- linux必看书籍推荐
- equals()方法很多情况下需要重写
- 资源分享 | 平面设计 | 平面设计相关软件快捷键汇总
- URLConnection 和 HttpURLConnection