题意

给定一个字符串 S,先将字符串 S 复制一次(变成双倍快乐),得到字符串 T,然后在 T 中插入一个字符,得到字符串 U。

给出字符串 U,重新构造出字符串 S。

所有字符串只包含大写英文字母。

分析

参照jklover的题解。

此题使用hash十分简单,直接枚举每个前缀,与长度相等的后缀比较即可.

时间复杂度:线性。

代码

哈希的计算方法很妙。

  1. #include<bits/stdc++.h>
  2. #define rg register
  3. #define il inline
  4. #define co const
  5. template<class T>il T read()
  6. {
  7. rg T data=0;
  8. rg int w=1;
  9. rg char ch=getchar();
  10. while(!isdigit(ch))
  11. {
  12. if(ch=='-')
  13. w=-1;
  14. ch=getchar();
  15. }
  16. while(isdigit(ch))
  17. {
  18. data=data*10+ch-'0';
  19. ch=getchar();
  20. }
  21. return data*w;
  22. }
  23. template<class T>il T read(rg T&x)
  24. {
  25. return x=read<T>();
  26. }
  27. typedef unsigned long long ull;
  28. co int N=2e6+1;
  29. co ull Base=233;
  30. ull Hash[N],Pow[N];
  31. int n;
  32. char s[N];
  33. int main()
  34. {
  35. // freopen(".in","r",stdin);
  36. // freopen(".out","w",stdout);
  37. read(n);
  38. scanf("%s",s+1);
  39. if(n%2==0)
  40. {
  41. puts("NOT POSSIBLE");
  42. return 0;
  43. }
  44. Pow[0]=1;
  45. for(int i=1;i<=n;++i)
  46. Pow[i]=Pow[i-1]*Base;
  47. Hash[0]=0;
  48. for(int i=1;i<=n;++i)
  49. Hash[i]=Hash[i-1]*Base+s[i];
  50. int cnt=0,cutpos;
  51. ull res=0;
  52. for(int i=1;i<=n;++i)
  53. {
  54. ull hashpre,hashsuf;
  55. if(i<=n/2)
  56. hashpre=Hash[n/2+1]+(Hash[i-1]-Hash[i])*Pow[n/2-i+1];
  57. else
  58. hashpre=Hash[n/2];
  59. if(i<=n/2+1)
  60. hashsuf=Hash[n]-Hash[n/2+1]*Pow[n/2];
  61. else
  62. hashsuf=(Hash[i-1]-Hash[n/2]*Pow[i-n/2-1])*Pow[n-i]+Hash[n]-Hash[i]*Pow[n-i];
  63. if(hashpre==hashsuf)
  64. {
  65. ++cnt;
  66. if(res&&hashpre!=res)
  67. {
  68. puts("NOT UNIQUE");
  69. return 0;
  70. }
  71. res=hashpre;
  72. cutpos=i;
  73. }
  74. }
  75. if(!cnt)
  76. puts("NOT POSSIBLE");
  77. else
  78. {
  79. if(cutpos>n/2)
  80. for(int i=1;i<=n/2;++i)
  81. putchar(s[i]);
  82. else
  83. for(int i=1;i<=n/2+1;++i)
  84. if(i!=cutpos)
  85. putchar(s[i]);
  86. puts("");
  87. }
  88. return 0;
  89. }

LOJ2823 「BalticOI 2014 Day 1」三个朋友的更多相关文章

  1. LOJ#2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On

    题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样 ...

  2. 【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)

    [题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操 ...

  3. 「JOI 2014 Final」飞天鼠

    「JOI 2014 Final」飞天鼠 显然向上爬是没有必要的,除非会下降到地面以下,才提高到刚好为0. 到达一个点有两种情况:到达高度为0和不为0. 对于高度不为0的情况,显然花费的时间越少高度越高 ...

  4. 「JOISC 2014 Day1」巴士走读

    「JOISC 2014 Day1」巴士走读 将询问离线下来. 从终点出发到起点. 由于在每个点(除了终点)的时间被过来的边固定,因此如果一个点不被新的边更新,是不会发生变化的. 因此可以按照时间顺序, ...

  5. 「JOISC 2014 Day1」 历史研究

    「JOISC 2014 Day1」 历史研究 Solution 子任务2 暴力,用\(cnt\)记录每种权值出现次数. 子任务3 这不是一个尺取吗... 然后用multiset维护当前的区间,动态加, ...

  6. C#下实现的K-Means优化[1]-「离群点检测」

    资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...

  7. 「白帽黑客成长记」Windows提权基本原理(下)

    上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...

  8. [转帖]「白帽黑客成长记」Windows提权基本原理(下)

    「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserv ...

  9. [转帖]「白帽黑客成长记」Windows提权基本原理(上)

    「白帽黑客成长记」Windows提权基本原理(上) https://www.cnblogs.com/ichunqiu/p/10949592.html 我们通常认为配置得当的Windows是安全的,事实 ...

随机推荐

  1. gvim中对变量的识别

    最近在项目中使用gvim打开一个文件,发现对某个变量不识别. 后来发现是gvim中对{$comm_ver},带花括号的变量不识别. 类似这样:parameter memory_spec = " ...

  2. 《网络攻防》Web基础

    20145224陈颢文 <网络攻防>Web基础 基础问题回答 什么是表单: 表单是一个包含表单元素的区域.表单元素是允许用户在表单中输入信息的元素.表单在网页中主要负责数据采集功能. 浏览 ...

  3. Java 四大作用域总结

    一.ServletContext 1.生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟 ...

  4. [Android Studio系列(五)] Android Studio手动配置Gradle的方法

    1 问题 (1) android sutdio第一次打开一个工程巨慢怎么办? (2) 手动配置Gradle Home为什么总是无效? (3) 明明已经下载了Gradle,配置了gradle home, ...

  5. 安装MySQL 5.6

    记录安装mysql 5.6的全过程 下载安装包(尝试过使用mysql的yum源去安装--如果你的网络够好的话...) 注:我的系统是Centos 7.2的 如下,根据自己的需求去下载 CentOS L ...

  6. autofac.webapi2

    quick start https://autofaccn.readthedocs.io/en/latest/integration/webapi.html#quick-start To get Au ...

  7. SDOI2019&十二省联考 游记

    差不多写完了,然鹅去长郡学习前忘在机房电脑里了 总之是咕了

  8. tomcat绿色版——运行一闪而过的解决方法

    首先配置好jdk的环境变量 %JAVA_HOME%\bin;注意:一定是英文状态下的分号结尾 %TOMCAT%\bin;注意:一定是英文状态下的分号结尾 service.bat install ser ...

  9. DFS - 深度搜索 - 基于邻接列表表示法

    2017-07-25 15:38:00 writer:pprp 在前一篇图基于邻接列表表示法的代码加了一小部分,加了一个DFS函数,visited[N]数组 参考书目:张新华的<算法竞赛宝典&g ...

  10. 通过HBase API进行开发

    http://www.cnblogs.com/netbloomy/p/6683509.html 一.将HBase的jar包及hbase-site.xml添加到IDE 1.到安装HBase集群的任意一台 ...