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] ...
随机推荐
- WinRAR 激活码(KEY)
引自:http://blog.sina.com.cn/s/blog_6fd3b4800100nyk0.html WinRAR 是一个强大的压缩文件管理工具.它能备份你的数据,减少你的 E-mail 附 ...
- 记录利用CSS完美解决前端图片变形问题
在头条IT学堂看到CSS完美解决前端图片变形问题的文章,就记录分享下: 一.让图片的宽度或者高度等于容器的宽度或高度,多余的裁掉,然后让图片居中: <style type="text/ ...
- yii int
@echo off rem ------------------------------------------------------------- rem Yii command line ini ...
- 转 phpmyadmin操作技巧:如何在phpmyadmin里面复制mysql数据库?
对于每一个站长而言,都会遇到要进行网站测试的时候.这个时候,往往需要备份数据库.如果按照一般的操作方式,都是先把数据库导出并备份到本地,然后再服务器上测试.如果一切正常还好,一旦出了问题,就又得把数据 ...
- service: no such service mysqld 与MySQL的开启,关闭和重启
1.问题原因与解决办法 因为修改了MySQL临时文件的目录后,使用service mysqld restart重启MySQL出现如下错误: service: no such service mysql ...
- [译]libcurl错误码
CURLcode Almost all "easy" interface functions return a CURLcode error code. No matter wha ...
- pom.xml详情
这里借鉴一下csdn中的一个系列的博客: 第一篇:POM文件详解 第二篇:maven中的依赖作用范围 第三篇:maven中的可选依赖和依赖排除 第四篇:maven中的dependencies和depe ...
- [ 东莞市选 2008 ] GCD&LCM
\(\\\) \(Description\) 给出两数的\(GCD\)和\(LCM\),求合法的两数之差的绝对值最小是多少. \(GCD\times LCM\le10^{18}\) \(\\\) \( ...
- Unity笔记(3)自学第二天
学习记录: 界面使用: 脚本使用: 脚本注意点:
- Python学习日记之练习代码
# -*- coding:utf-8 -*- number = 23 test=True while test: guess=int(raw_input('输入数字')) if guess==numb ...