BZOJ 3916 [Baltic2014]friends

【题解】
暴力枚举添加字符的位置,然后判断去掉这个位置的字符串是否有由两个相同的串拼接而成。本题的n的范围为200W,暴力判断会TLE,所以要使用哈希。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#define LL long long
#define N 2000010
#define rg register
#define base (107)
using namespace std;
int n,pos,cnt,mid,val;
LL h[N],pow[N];
char s[N],s1[N],s2[N];
map<int,int>u;
inline int read(){
int k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
inline LL geth(int l,int r){
if(r<l) return ;
return h[r]-h[l-]*pow[r-l+];
}
inline bool check(int x){
int l1=x-,l2=n-x; LL tmp=,tmp2=;
if(x==mid){
tmp=geth(,mid-); tmp2=geth(mid+,n);
}
else{
if(x<mid) tmp=geth(,x-)*pow[mid-x]+geth(x+,mid),tmp2=geth(mid+,n);
else tmp=geth(,mid-),tmp2=geth(mid,x-)*pow[n-x]+geth(x+,n);
}
// printf("%d %lld %lld\n",x,tmp,tmp2);
val=tmp;
return tmp==tmp2;
}
int main(){
n=read(); mid=n/+;
if(!(n&)){puts("NOT POSSIBLE"); return ;}
scanf("%s",s+);
pow[]=;
for(rg int i=;i<=n;i++) h[i]=h[i-]*base+(int)s[i],pow[i]=pow[i-]*base;
// for(rg int i=1;i<=n;i++) printf("%d ",h[i]); puts("");
for(rg int i=;i<=n;i++){
if(check(i)){
if(!u[val]) u[val]=,cnt++,pos=i;
}
if(cnt>) break;
}
if(!cnt) puts("NOT POSSIBLE");
else{
if(cnt>) puts("NOT UNIQUE");
else{
int t=,pointer=;
while(t<=n/){
if(pointer==pos) pointer++;
else printf("%c",s[pointer++]),t++;
}
puts("");
}
}
return ;
}
BZOJ 3916 [Baltic2014]friends的更多相关文章
- BZOJ 3916: [Baltic2014]friends( hash )
		字符串哈希..然后枚举每一位+各种判断就行了 ----------------------------------------------------------------------------- ... 
- 【BZOJ】3916: [Baltic2014]friends
		http://www.lydsy.com/JudgeOnline/problem.php?id=3916 #include <bits/stdc++.h> using namespace ... 
- bzoj 3916 暴力哈希
		暴力的哈希,注意: 将一个串当作另一个串的前缀,需要乘上p[len],len=后面串的长度 这是自己的代码,拿数据在本地测A掉了,但是bz上wa了??bz换数据了难道?? #include<cs ... 
- bzoj 3916: friends 瞎搞
		题目: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 题解: 发现字符串的长度一定为奇数. ... 
- bzoj AC倒序
		Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ... 
- BZOJ刷题指南(转)
		基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ... 
- BZOJ 2127: happiness [最小割]
		2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ... 
- BZOJ 3275: Number
		3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ... 
- BZOJ 2879: [Noi2012]美食节
		2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ... 
随机推荐
- libnids 显示UDP数据报,编译,运行,正确。
			#include<stdio.h>#include<nids.h>#include<string.h>#include <sys/socket.h>#i ... 
- SQLAlchemy 反向生成 model 模型
			前言 Django 反向生成的 model 模型的命令 : python manager.py inspectdb SQLAlchemy / Flask-SQLAlchemy则是: pip3 ins ... 
- bzoj 1087: [SCOI2005]互不侵犯King【状压dp】
			显然是状压,设f[i][j][k]为1到i行选j个king,并且第i行状态为k的方案数,判断是否可行然后枚举转移即可 先把可行状态预处理出来会变快 #include<iostream> # ... 
- bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士【bfs】
			bfs预处理出每个点s和t的距离d1和d2(无法到达标为inf),然后在若干灌木丛格子(x,y)里取min(d1[x][y]+d2[x][y]) /* 0:贝茜可以通过的空地 1:由于各种原因而不可通 ... 
- bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路【最小生成树】
			先把已有的边并查集了,然后MST即可 记得开double #include<iostream> #include<cstdio> #include<algorithm&g ... 
- Android中出现Error:In (declare-styleable) FontFamilyFont, unable to find attribute android:font
			Android中出现Error:In (declare-styleable) FontFamilyFont, unable to find attribute android:font 解决办法,今天 ... 
- [Windows Server 2012] SQL Server 备份和还原方法
			★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:SQL S ... 
- QS之shell script
			1 Invoke Mdoelsim In order to open Modelsim automatically, it is better to use a shell script to inv ... 
- Python+selenium学习(一) 打开Firefox浏览器,IE浏览器和Chrome浏览器
			from selenium import webdriver # open Firefox #driver=webdriver.Firefox() # Open IE #driver=webdrive ... 
- Java8(一)--lambda表达式
			相信作为一个Java程序员都会或多或少的了解过Java8中的lambda表达式.函数式编程等,本人也是用过lambda表达式,使用的都是比较简单 的实现 通过一个例子去都感受lambda: Compa ... 
