标签:
G - 密码Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %lluDescriptionFish是一条生活在海里的鱼。有一天他很无聊,就到处去寻宝。他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进。通过翻阅古籍,Fish得知了这个密码的相关信息:1.该密码的长度为N2.密码仅含小写字母3.以每一个字符为中心的最长回文串长度。4.以每两个相邻字符的间隙为中心的最长回文串长度。很快Fish发现可能有无数种满足条件的密码。经过分析,他觉得这些密码中字典序最小的一个最有可能是答案,你能帮他找到这个密码么?注意:对于两个串A和B,如果它们的前i个字符都相同,而A的第i+1个字符比B的第i+1个字符小,那么认为是则称密码A的字典序小于密码B的字典序,例如字符串\textsf{abc}字典序小于字符串\textsf{acb}。如果密码A的字典序比其他所有满足条件的密码的字典序都小,则密码A是这些密码中字典序最小的一个。
Input:
输入由三行组成。
第一行仅含一个整数N,表示密码的长度。
第二行包含N个整数,表示以每个字符为中心的最长回文串长度。
第三行包含N−1个整数,表示每两个相邻字符的间隙为中心的最长回文串长度。
对于20%的数据,1≤n≤100。
另有30%的数据,1≤n≤1000。
最后50%的数据,1≤n≤105。
Output:
输出仅一行。输出满足条件的最小字典序密码。古籍中的信息是一定正确的,故一定存在满足条件的密码。
Sample Input:
3
1 1 1
0 0
3
1 3 1
0 0
3
1 3 1
2 2Sample Output:
abc
aba
aaa
Hint
第一组样例:
符合条件的还有
abd
、abe
、abf
……zyx
,但是字典序最小的为abc
。
第二组样例:
第三组样例:
正在听学长讲这道题,,略蒙蔽,,先开坑,等听懂了,我或许会继续写这个博客的
刚刚听学长讲,半懂半不懂的 (=_= ),, 大约需要用到并查集啊,贪心啊,manachar啊等等等,好像现在来不及在这里写这道题代码了 = =(纯属因为蒟蒻懒而已)我就把学长今天的manachar代码贴一下吧,,,,(就是这么懒 = = 你咬我啊):
1 int manachar(int m) 2 { 3 int ans=0; 4 int id;//中心 5 int mx;//延伸宽度 6 id=-1,mx=-1; 7 for (int i=1;i<=m;i++) 8 { 9 if (id+mx>=i) 10 len[i]=min(len[id*2-i],id+mx-i); 11 while (i-len[i]-1>=0 && i+len[i]+1<=m && s2[i-len[i]-1]==s2[i+len[i]+1]) //这道题就是把这里的查询等等改成连边,这样就直接把并查集复杂度降低到O(n^2)级 撒撒撒?还是略蒙= = 12 len[i]++; 13 if (i+len[i]>id+mx) 14 id=i,mx=len[i]; 15 ans=max(ans,len[i]); 16 } 17 return ans; 18 }
最后来一张昨天学长介绍的那个神奇又强大的vim的截图,,
因为有在linux上用vim的经验,瞬间就上手了,,话说这个软件如果真的用熟了真的真的是太方便了,不过要是没用过第一次接触的话用起来还真难受 = =
所以, 以后听从这个NOI金牌的建议,就不用dev-c++了,hhhhhhhhhhh解放了
个人感觉自己下午google上找到的配色方案还是挺萌哒
(华电机房可以直接科学上网,网速还贼快,秒秒钟下完android studio = = 真不错 )
标签:
原文地址:http://www.cnblogs.com/zhangone/p/5447523.html