题目描述

有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S.

输入

第一行一个数N,表示U的长度.
第二行一个字符串U,保证U由大写字母组成

输出

输出一行,若S不存在,输出"NOT POSSIBLE".若S不唯一,输出"NOT UNIQUE".否则输出S.

样例输入

Sample Input1:
7
ABXCABC
Sample Input2:
6
ABCDEF
Sample Input3:
9
ABABABABA

样例输出

Sample Output1:
ABC
Sample Output2:
NOT POSSIBLE
Sample Output3:
NOT UNIQUE


题解

字符串hash

首先偶数长度一定不存在,输出NOT POSSIBLE

奇数则先将每个前缀的hash值求出来,然后枚举多余字符位置,并根据位置与n/2和n/2+1的关系判断并求出前后两个字符串的hash值。

然后hash值相同时比较一下就好了。

#include <cstdio>
#define N 2000010
char str[N];
unsigned long long hash[N] , base[N] , x , y , ans;
int main()
{
int n , i , p , flag = 0 , sum = 0;
scanf("%d%s" , &n , str + 1);
if(n % 2 == 0)
{
printf("NOT POSSIBLE\n");
return 0;
}
base[0] = 1;
for(i = 1 ; i <= n ; i ++ ) hash[i] = hash[i - 1] * 131 + str[i] , base[i] = base[i - 1] * 131;
for(i = 1 ; i <= n ; i ++ )
{
if(i <= n / 2) x = hash[n / 2 + 1] - hash[i] * base[n / 2 - i + 1] + hash[i - 1] * base[n / 2 - i + 1];
else x = hash[n / 2];
if(i <= n / 2 + 1) y = hash[n] - hash[n - n / 2] * base[n / 2];
else y = (hash[i - 1] - hash[n / 2] * base[i - n / 2 - 1]) * base[n - i] + hash[n] - hash[i] * base[n - i];
if(x == y)
{
if(flag && ans != x)
{
printf("NOT UNIQUE\n");
return 0;
}
flag = 1 , ans = x , p = i;
}
}
if(!flag)
{
printf("NOT POSSIBLE\n");
return 0;
}
for(i = 1 ; sum < n / 2 ; i ++ )
if(i != p)
printf("%c" , str[i]) , sum ++ ;
printf("\n");
return 0;
}

【bzoj3916】[Baltic2014]friends 字符串hash的更多相关文章

  1. [知识点]字符串Hash

    1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...

  2. 【BZOJ-3555】企鹅QQ 字符串Hash

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1545  Solved: 593[Submit][Statu ...

  3. POJ 1200 字符串HASH

    题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...

  4. LA4671 K-neighbor substrings(FFT + 字符串Hash)

    题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...

  5. 各种字符串Hash函数比较(转)

    常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...

  6. 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774

    Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...

  7. 字符串hash - POJ 3461 Oulipo

    Oulipo Problem's Link ---------------------------------------------------------------------------- M ...

  8. 长度有限制的字符串hash函数

    长度有限制的字符串hash函数 DJBHash是一种非常流行的算法,俗称"Times33"算法.Times33的算法很简单,就是不断的乘33,原型如下 hash(i) = hash ...

  9. hdu 4622 Reincarnation 字符串hash 模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有不超过1e5次的区间查询,输出每次查询区间中不同 ...

随机推荐

  1. SEO人士一定要了解的搜索引擎惩罚原则

       SEO人士一定要了解的搜索引擎惩罚原则 SEO 的人一般都知道SEO分为白帽,黑帽,甚至还有灰帽.简单说,如果你熟读过谷歌网站质量指南,就可以了解,符合搜索引擎质量规范并且符合用户体验的SEO ...

  2. 支持向量机: Maximum Margin Classifier

    支持向量机即 Support Vector Machine,简称 SVM .我最开始听说这头机器的名号的时候,一种神秘感就油然而生,似乎把 Support 这么一个具体的动作和 Vector 这么一个 ...

  3. bootstrap2文档的学习

    就像刚开始的 优雅,直观,强大的前端框架,让web开发更快,更容易,bootstrap给我的感觉就是把常用的布局,组件(导航,列表,按钮,表格),还有规范化颜色等等,同时它的遍历不至于此,他还支持了自 ...

  4. C#创建和使用ActiveX组件

    开发基于.Net平台上的程序员是很难从本质上把Visual C#和ActiveX组件联起来,虽然在使用Visual C#开发应用程序时,有时为了快速开发或者由于.Net FrameWork SDK的不 ...

  5. 【luogu题解】P1546 最短网络 Agri-Net

    题目 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场.为了用最小的消费,他想铺设最短的光纤去连接所有的农场. 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并 ...

  6. 2018.11.3 Nescafe18 T2 太鼓达人

    题目 背景 七夕祭上,Vani 牵着 cl 的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 XLk.Poet_shy 和 ly ...

  7. 初识Java程序,编写简单代码?

    Dear All: 初识Java程序,编写简单代码? 首先小编在这里说下我们今天编写Java程序使用的是 eclipse 开发工具! 1.下载eclipse 官网地址:http://www.eclip ...

  8. CentOS---zookeeper安装(单机、伪集群、集群)

    一:单机安装: 可以参考下面的伪集群安装方式 不同点: 不需要在data目录下创建 myid 文件 不需要配置集群 配置好后的启动和状态查询命令相同!! 二:伪集群模式 伪集群模式就是在同一主机上启动 ...

  9. Fakeapp 入门教程(2):使用篇!

    Fakeapp软件的使用主要分成了三个步骤, 使用之前请确保你的电脑配置还可以,推荐配置是:一张显存大于4G的N卡.Fakeapp是有支持CPU选项,但是用CPU跑非常慢. 获取脸部图片 训练模型 生 ...

  10. 【bug】【yii】配置log时,报错 Setting read-only property: yii\web\Application::log

    Setting read-only property: yii\web\Application::log 配置放在了 components 外面,应该放在里面