关闭

bzoj4104【THUSC2015】解密运算

标签: bzojTHUSC
2835人阅读 评论(0) 收藏 举报
分类:

4104: [Thu Summer Camp 2015]解密运算

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 301  Solved: 190
[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




这道题思路很妙,代码很短,看了题解是深深的无力感...

首先每个数能给我们两个信息:这个数是什么,这个数后面第一个数开头的字符串的排名。

所以我们只要知道每个数开头字符串的排名,就可以依次推出每一个数是多少。

所以问题就是如何求这个排名,实际上就是求后缀数组。

考虑两个字符串,如果首字母不同,那顺序很好确定;如果首字母不同,就要比较下一个字母,而下一个字母的排名实际已经给出了,就是读入的序号。

所以我们将读入的序列,以权值为第一关键字,序号为第二关键字排序。

这样就得到第一个数开头的字符串的排名,就能知道第一个数是多少,然后就得到第二个数开头的字符串的排名,又可以知道第二个数是多少……按这个顺序就可以得到每一个数了。




#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define pa pair<int,int>
#define N 200005
using namespace std;
int n,m;
pa a[N];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int main()
{
	n=read();m=read();
	F(i,0,n) a[i].first=read(),a[i].second=i;
	sort(a,a+n+1);
	int tmp=a[0].second;
	F(i,1,n)
	{
		printf("%d ",a[tmp].first);
		tmp=a[tmp].second;
	}
	return 0;
}


0
0
查看评论

【bzoj4104】[Thu Summer Camp 2015]解密运算 乱搞

这种题就是要多想一想 首先每个数给了我们两个信息,这个数是什么,以这个数后面的第一个数为开头的字符串的排名 首先0的位置告诉了我们第一个数排第几 而第一个数的位置又告诉了第二个数排第几 依此类推 那么怎么找到正确的排名呢? 其实我们只需要考虑首字母相同的字符串的大小比较 咦,首字母相同...
  • u012288458
  • u012288458
  • 2016-02-27 15:55
  • 878

【BZOJ4104】【Thusc2015】解密运算

这些XJB算法的题竟然是小夏令营题想想就好可怕TAT(你萌不知道什么是XJB算法???) 讲道理这道题的标程虽然奇短无比但是想法还是蛮有启发意义的。。。我试着口胡一下原理QAQ 先考虑无元素重复的情况: 首先会得到N+1个序列的按字典序排列的最后一个值 对于每一个序列,为了表达方便,我们扯一个三...
  • qq_34637390
  • qq_34637390
  • 2016-06-01 15:56
  • 803

BZOJ 4104 [Thu Summer Camp 2015]解密运算

恩。。夏令营。。 #include #include using namespace std; const int N = 200001; #define FOR(i, j, k) for (i = j; i <= k; i ++) int a[N], b[N], c[N], d[N], ...
  • huanghongxun
  • huanghongxun
  • 2015-12-31 21:44
  • 539

BZOJ 4103~4105 THUSC2015 题解

T1:BZOJ 4013 xor 题目大意:给定一个长度为nn的数列aa和一个长度为mm的数列bb,给定矩阵AA,令Ai,j=ai⊕bjA_{i,j}=a_i\oplus b_j,qq次询问某个子矩形里的kk大值 n≤1000,m≤3∗105,q≤500n\leq 1000,m\leq 3*10...
  • PoPoQQQ
  • PoPoQQQ
  • 2015-06-03 17:55
  • 3428

NOI2015酱油记

这么一想我好像破掉了两个flag。。。 一个是Ag滚粗的flag……(Wc、Ctsc、Apio都是Ag滚粗 另一个是二试被翻的flag……(NOIP,省选,Ctsc,各种二试被艹DAY -1报到日 从长春坐一晚上火车到北京然后坐高铁到杭州。。。 一下车一股热气真爽~ 下了车看到好多人……黄...
  • PoPoQQQ
  • PoPoQQQ
  • 2015-08-02 04:07
  • 6151

THUSC2015

这套题测得时候被暴虐了。。。 T1:  bzoj 4103: [Thu Summer Camp 2015]异或运算  http://www.lydsy.com/JudgeOnline/problem.php?id=4103  这题是个水题,就是以Y...
  • abc473848880_
  • abc473848880_
  • 2015-06-15 16:18
  • 972

BZOJ 4104: [Thu Summer Camp 2015]解密运算

Description对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符”.”。之后将字符串视为一个环,从位置1,2,3,…,N+1为起点读出N+1个字符,就能得到N+1个字符串。比如对于字符串“ABCAAA”,我们可以得到这N+1个串: ABCAAA. BCAAA.A CAAA....
  • ypxrain
  • ypxrain
  • 2017-09-14 10:03
  • 75

bzoj4104【THUSC2015】解密运算

一道神奇的乱搞题
  • AaronGZK
  • AaronGZK
  • 2016-06-01 23:23
  • 2835

bzoj 4104: [Thu Summer Camp 2015]解密运算

暴力做法: 已知长度为l的所有子串,可以推出长度为l+1的所有子串,比如样例已知长度为1的子串是?AAAABC,而以这些字符开头的字符串的结尾分别是AAAC?AB,而这些字符也是写在对应字符前面的字符,所以得到了子串{A?,AA,AA,CA,?A,AB,BC},然后再用相似的办法推出剩下的子串,但这...
  • heheda_is_an_OIer
  • heheda_is_an_OIer
  • 2016-05-18 10:54
  • 512

【BZOJ4104】解密运算(THUSC2015)-排序和循环串性质应用

【BZOJ4104】解密运算(THUSC2015)-排序和循环串性质应用
  • Maxwei_wzj
  • Maxwei_wzj
  • 2017-05-19 13:39
  • 164
    个人资料
    • 访问:735866次
    • 积分:11520
    • 等级:
    • 排名:第1592名
    • 原创:417篇
    • 转载:3篇
    • 译文:0篇
    • 评论:45条
    云中谁寄锦书来