BZOJ_3916_[Baltic2014]friends_hash
BZOJ_3916_[Baltic2014]friends_hash
题意:
有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S.
分析:
字符串哈希
首先n%2==0一定没有答案
枚举插入的字符,拿出来,判断一下前后两半串的哈希值是否相等
具体做法:一个串被一个字符隔开了,它的哈希值等于前面串的哈希值*base^(len[后面串])+后面。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 2000050
#define LL unsigned long long
char s[N];
LL p=13131,mi[N],h[N],ans;
int n,pos;
int main()
{
ans=-1;
scanf("%d%s",&n,s+1);
int l=(n-1)/2;
if(n%2==0)
{
puts("NOT POSSIBLE");return 0;
}
int i;
mi[0]=1;
for(i=1;i<=n;i++)
{
h[i]=h[i-1]*p+s[i];
mi[i]=mi[i-1]*p;
}
for(i=1;i<=n+1;i++)
{
if(i-1<l)
{
LL h1=h[i-1]*mi[l-i+1]+(h[l+1]-h[i]*mi[l-i+1]);
LL h2=h[n]-h[l+1]*mi[l];
if(h1==h2)
{
pos=i;
if(ans==-1)ans=h1;
else if(ans!=h1)
{
puts("NOT UNIQUE");return 0;
}
}
}
else
{
LL h1=h[l];
LL h2=(h[i-1]-h[l]*mi[i-l-1])*mi[n-i]+h[n]-h[i]*mi[n-i];
if(h1==h2)
{
pos=i;
if(ans==-1)ans=h1;
else if(ans!=h1)
{
puts("NOT UNIQUE");return 0;
}
}
}
}
if(ans==-1)
{
puts("NOT POSSIBLE");return 0;
}
if(pos-1<l)
{
for(i=l+2;i<=n;i++)printf("%c",s[i]);
}
else
{
for(i=1;i<=l;i++)printf("%c",s[i]);
}
}
BZOJ_3916_[Baltic2014]friends_hash的更多相关文章
- BZOJ 3916: [Baltic2014]friends( hash )
字符串哈希..然后枚举每一位+各种判断就行了 ----------------------------------------------------------------------------- ...
- 【BZOJ】3916: [Baltic2014]friends
http://www.lydsy.com/JudgeOnline/problem.php?id=3916 #include <bits/stdc++.h> using namespace ...
- BZOJ3919 : [Baltic2014]portals
预处理出每个点上下左右能延伸到的最远点以及到它们的距离的最小值md. 然后spfa,一个点除了可以以1的代价到达四周的点之外,还可以以md+1的代价到达四个方向能到达的最远点. #include< ...
- bzoj3917: [Baltic2014]sequence
Description 序列A由从N开始的连续K个数按顺序构成,现在将A中的每个数只保留某一个数码,记为序列B,给定K和B,求可能的最小的N Input 第一行一个数K,第二行K个数B_i Outp ...
- BZOJ3916: [Baltic2014]friends
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 复习一下hash(然后被傻叉错误卡了半天TAT... 取出一个字串:h[r]-h[l-1 ...
- 【题解】 bzoj3916: [Baltic2014]friends (字符串Hash)
题面戳我 Solution 首先长度为偶数可以直接判掉 然后我们可以枚举删的位置,通过预处理的\(hash\),判断剩余部分是否划分成两个一样的 判重要注意,我们把字符串分为三个部分\(L_l+1+L ...
- BZOJ3916: [Baltic2014]friends
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 题解:随便hash.刚开始看错题WA了N发.(我连双hash都写了!) 代码: #inc ...
- [Baltic2014]friends
嘟嘟嘟 首先想想暴力的做法,枚举加入的字符,然后判断删去这个字符后两个长度为n / 2的字符串是否相等,复杂度O(n2). 所以可以想办法把判断复杂度降低到O(1),那自然就想到hash了.hash是 ...
- bzoj3918 [Baltic2014]Postman
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3918 [题解] 每日至少更一题啊qwq凑任务(迷 明显猜个结论:随便搜环就行了 然后搜环姿势 ...
随机推荐
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- SQL解决"双重职位的查询"
双重身份问题: create table role_tab ( person char(5) not null, role char(1) not null ) insert into role_t ...
- Golang之Context的使用
转载自:http://www.nljb.net/default/Golang%E4%B9%8BContext%E7%9A%84%E4%BD%BF%E7%94%A8/ 简介 在golang中的创建一个新 ...
- log4j2.xml全配置文件
可以参考如下配置 <?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF &g ...
- centos 7查看防火墙报错(已解决,之前安装过python3)
[root@localhost ~]# service firewalld restartRedirecting to /bin/systemctl restart firewalld.service ...
- Ocelot中文文档-缓存
目前Ocelot使用CacheManager项目提供了一些非常基本的缓存.这是一个了不起的项目,它解决了很多缓存问题. 我会推荐这个软件包来做Ocelot缓存. 如果你看看这里的例子,你可以看到如何设 ...
- Jmeter(二十六)_数据驱动测试
花了一点时间做了一个通用的执行引擎,好处就是我不用再关注测试脚本的内容,而是用测试用例的数据去驱动我们执行的方向.(这个只适合单个接口的测试,具体运用到接口自动化时,还是要靠手动去编写脚本!) 首先我 ...
- (七):C++分布式实时应用框架 2.0
C++分布式实时应用框架 2.0 技术交流合作QQ群:436466587 欢迎讨论交流 上一篇:(六):大型项目容器化改造 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同 ...
- 如何确保API的安全性
目标: 定义API安全性要求 使用security scheme来应用资源和方法级策略 定义API的自定义security scheme 将OAuth2.0外部供应商策略应用到资源方法 为API定义一 ...
- Android之淘宝商品列表长按遮罩效果
先来看看淘宝.唯品会长按商品的效果,以及简单Demo的效果: 首先分析一下场景: 长按条目时,弹出遮罩的效果遮挡在原来的条目布局上: 页面滑动或点击其他的条目,上一个正在遮罩的条目遮罩消 ...