bzoj 3916 暴力哈希
暴力的哈希,注意:
将一个串当作另一个串的前缀,需要乘上p[len],len=后面串的长度
这是自己的代码,拿数据在本地测A掉了,但是bz上wa了??bz换数据了难道??
#include<cstdio>
#include<cstring>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
const int N=;
typedef unsigned long long ull; int n,mid;
char a[N],ans[N];
ull p[N],sum[N],b; inline ull get(int l,int r){
return sum[r]-sum[l-]*p[r-l+];}
bool judge(int i){
ull x,y,la;
if(i<mid+){
x=get(,i-)*p[mid+-i]+get(i+,mid+);
y=get(mid+,n);
}else if(i==mid+){
x=get(,mid);
y=get(mid+,n);
}else if(i>mid+){
x=get(,mid);
y=get(mid+,i-)*p[n-i]+get(i+,n);
}if(x==y){
if(x==la) return ;
la=x;
int top=;
if(i<=mid+) rep(j,mid+,n) ans[++top]=a[j];
else rep(j,,mid) ans[++top]=a[j];
return ;
}
return ;
}
int main(){
scanf("%d",&n);if(n%==) {puts("NOT POSSIBLE");return ;}
scanf("%s",a+);mid=n/; p[]=;b=;
rep(i,,n) p[i]=p[i-]*b;
rep(i,,n) sum[i]=sum[i-]*b+(a[i]-'A'+); int cnt=;
rep(i,,n){cnt+=judge(i);if(cnt>) break;} if(!cnt) puts("NOT POSSIBLE");
else if(cnt>) puts("NOT UNIQUE");
else puts(ans+); return ;
}
别人的代码,侵删啊啊啊
#include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define down(i,l,r) for (int i=l;i>=r;i--)
#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 2000009
#define p 23333
using namespace std;
typedef unsigned long long ll;
char ans[maxn],s[maxn];
ll h[maxn],bin[maxn],last;
int now,n,mid,anspos;
int read(){
int x=,f=; char ch=getchar();
while (!isdigit(ch)){
if (ch=='-') f=-; ch=getchar();
}
while (isdigit(ch)){
x=x*+ch-''; ch=getchar();
}
return x*f;
}
ll get(int l,int r){
return h[r]-h[l-]*bin[r-l+];
}
int judge(int pos){
ll x,y,z;
int flag=;
if (pos<mid){
x=get(,pos-)*bin[mid-pos]+get(pos+,mid);
y=get(mid+,n);
}
else if (pos>mid){
x=get(,mid-);
y=get(mid,pos-)*bin[n-pos]+get(pos+,n);
}
else if (pos==mid){
x=get(,mid-);
y=get(mid+,n);
}
if (x==y){
if (x==last) return ;
last=x;
int top=;
if (pos<=mid) rep(i,mid+,n) ans[++top]=s[i];
else rep(i,,mid-) ans[++top]=s[i];
return ;
}
return ;
}
int main(){
freopen("3916.in","r",stdin);
freopen("3916.out","w",stdout);
n=read(); if (n%==) {puts("NOT POSSIBLE"); return ;}
scanf("%s",s+);
bin[]=; rep(i,,n) bin[i]=bin[i-]*p;
rep(i,,n) h[i]=h[i-]*p+s[i];
mid=(n/)+;
int cnt=;
rep(i,,n) {
cnt+=judge(i);
if (cnt>) break;
}
if (!cnt) puts("NOT POSSIBLE");
else if (cnt>) puts("NOT UNIQUE");
else puts(ans+);
return ;
}
bzoj 3916 暴力哈希的更多相关文章
- BZOJ 3916: [Baltic2014]friends( hash )
字符串哈希..然后枚举每一位+各种判断就行了 ----------------------------------------------------------------------------- ...
- luogu 3538/bzoj 2795 Poi2008 哈希+质数结论
题意:给定一个子串,询问一些子区间内的最短循环节(循环节是越短条件约束越多) 开始一看那就哈希处理然后暴力枚举循环节,然后按照循环节长度暴力向后比较,本地测试40,洛谷60 #include<b ...
- BZOJ 3916 [Baltic2014]friends
[题解] 暴力枚举添加字符的位置,然后判断去掉这个位置的字符串是否有由两个相同的串拼接而成.本题的n的范围为200W,暴力判断会TLE,所以要使用哈希. #include<cstdio> ...
- bzoj 1028 暴力枚举判断
昨天梦到这道题了,所以一定要A掉(其实梦到了3道,有两道记不清了) 暴力枚举等的是哪张牌,将是哪张牌,然后贪心的判断就行了. 对于一个状态判断是否为胡牌,1-n扫一遍,然后对于每个牌,先mod 3, ...
- bzoj 2073 暴力
2073: [POI2004]PRZ Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 442 Solved: 327[Submit][Status][D ...
- bzoj 3620 暴力KMP
十分暴力的KMP,枚举左端点,在向右侧推进的同时,取较小的la保证条件,n方暴力 #include<bits/stdc++.h> #define rep(i,j,k) for(int i= ...
- bzoj 3507 DP+哈希
[Cqoi2014]通配符匹配 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 541 Solved: 235[Submit][Status][Dis ...
- fzu2280 Magic(暴力+哈希预处理)
传送门 题意 q次操作,每次两种操作: 1 x y:将wx变成y 2 x:查询满足一下两个条件的字符串(①以字符串x为后缀②字符串值\(\le wx\)) 分析 对n个字符串预处理,设f[i][j]为 ...
- bzoj 1493 暴力
我们可以枚举每个点,然后求出这个点到其余点最小消耗的代价,求出比t小的且距离最大的更新答案. /**************************************************** ...
随机推荐
- [SCOI2014]方伯伯的OJ(线段树)
方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题.Oj上注册了n个用户,编号为1-n“,一开始他们按照编号排名. 方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号: 1.操作格式为 ...
- [SCOI2008]奖励关(期望dp)
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...
- 对于submit text3运行Python脚本的解决方法
先抛出一些配置信息吧 电脑安装了Python2和Python3两种版本,并且还改了exe文件的名字,可能这与默认的submit text3配置不同了吧,导致错误. 先抛出一些错误吧 首先,自动CTRL ...
- wildfly tomcat 服务器不响应 不返回 死住了 查看tcp CLOSE_WAIT 暴多
I'm also having the same issue with a very latest Tomcat server (7.0.40). It goes non-responsive onc ...
- MFC读写配置ini文件
https://blog.csdn.net/naibozhuan3744/article/details/78783446 https://blog.csdn.net/rayborn1105/arti ...
- Day23--Python--常用模块02--序列化,configparser
1. 序列化 把对象打散成bytes或者字符串. 方便存储和传输 序列化 把bytes或者字符串转换回对象. 反序列化 2. pickle(比较重要) 把python中所有的对象都可以转化成bytes ...
- linux 下配置svn
1.以前配置好的,没做笔记,忘记了.现在重新回忆 查找svn目录:find / -name svn 找到/projects/svn cd /projects/svn 看里面的配置: 查看配置 [roo ...
- python: 多态与虚函数;
通过python的abc模块能够实现虚函数: 首先在开头from abc import ABCMeta, abstractmethod 例子 : #!/usr/bin/python #coding ...
- u-boot(二)makefile
目录 u-boot(二)makefile 引入 目录结构(1.1.6) 配置文件 目标 配置具体的单板 编译阶段 过程 链接入口 配置链接地址 附录 附录A:mkconfig解析 附录B 链接脚本 t ...
- ansible Api 2.3-2.4
官网示例(python3) 说明: 在学习2.0 api的过程中遇到了一个坑,最新版的ansible(2.4)和2.3版本api引用时发生了变化,本文主要使用2.3 api进行操作,2.4只做分析 a ...