BZOJ3916: [Baltic2014]friends

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916

题解:随便hash.刚开始看错题WA了N发.(我连双hash都写了!)

代码:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<iostream>
 7 #include<vector>
 8 #include<map>
 9 #include<set>
10 #include<queue>
11 #include<string>
12 #define inf 1000000000
13 #define maxn 2000000+5
14 #define maxm 200000+5
15 #define eps 1e-6
16 #define ll unsigned int
17 #define pa pair<int,int>
18 #define for0(i,n) for(int i=0;i<=(n);i++)
19 #define for1(i,n) for(int i=1;i<=(n);i++)
20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
22 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
23 #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
24 #define lch k<<1,l,mid
25 #define rch k<<1|1,mid+1,r
26 #define sqr(x) (x)*(x)
27 #define db double
28 using namespace std;
29 inline int read()
30 {
31     int x=0,f=1;char ch=getchar();
32     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
33     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
34     return x*f;
35 }
36 int n,pos;
37 char s[maxn];
38 ll h[maxn],p[maxn];
39 inline ll get(int x,int y){return x>y?0:h[y]-h[x-1]*p[y-x+1];}
40 ll ans,t1,t2;
41 inline bool check(int x)
42 {
43    if(x>n>>1)t1=get(1,n>>1),t2=(get((n>>1)+1,x-1)*p[n-x]+get(x+1,n));
44    else t1=get(n-(n>>1)+1,n),t2=(get(1,x-1)*p[(n>>1)-x+1]+get(x+1,(n>>1)+1));
45    return t1==t2;
46 }
47 int main()
48 {
49    freopen("input.txt","r",stdin);
50    freopen("output.txt","w",stdout);
51    n=read();scanf("%s",s+1);
52    if(n%2==0){printf("NOT POSSIBLE\n");return 0;}
53    p[0]=1;
54    for1(i,n)h[i]=h[i-1]*13131+s[i]-‘A‘,p[i]=p[i-1]*13131;
55    for1(i,n)if(check(i))
56    {
57      pos=i;
58      if(!ans)ans=t1;
59      else if(t1!=ans){printf("NOT UNIQUE\n");return 0;};
60    }
61    if(!pos)printf("NOT POSSIBLE\n");
62    else
63    {
64      if(pos>n>>1)for1(i,n>>1)printf("%c",s[i]);
65      else for2(i,n-(n>>1)+1,n)printf("%c",s[i]);
66      printf("\n");
67    }
68    return 0;
69 }

字体为什么忽然变了好鬼畜

时间: 2024-08-01 01:04:34

BZOJ3916: [Baltic2014]friends的相关文章

图片上传及显示(包含多文件)

前一段时间用到文件上传,好久没有写这个东西,有的东西也忘记了.所以本篇博客BZ决定记载一下,一方面自己回顾加深一下,另一方面供各位程序员学习. 希望大神们对本文不对的地方进行批评指正! 先在我们的html页面写上上传文件的文本框及图片显示所在的DIV,如下: 1 <div class="form-group"> 2 <label class="col-sm-2 control-label no-padding-right" id="lb_

BZOJ 3916: [Baltic2014]friends( hash )

字符串哈希..然后枚举每一位+各种判断就行了 -------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int MOD = 1000000007; const i

bzoj3917【Baltic2014】sequence

3917: [Baltic2014]sequence Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 190  Solved: 90 [Submit][Status][Discuss] Description 序列A由从N开始的连续K个数按顺序构成,现在将A中的每个数只保留某一个数码,记为序列B,给定K和B,求可能的最小的N Input 第一行一个数K,第二行K个数B_i Output 输出一个数N Sample Input 6 7 8 9 5

SAP ABAP编程 在string类型A字符串中查询匹配string类型B字符串

如题,在string类型A字符串中查询匹配string类型B字符串,方法如下: DATA: a TYPE string VALUE 'ABCDEFGHIJKLNM', b TYPE string VALUE 'EFGHIJ', c TYPE string . DATA: off  TYPE i VALUE 0,   "从自己个字符开始查找 moff TYPE i, mlen TYPE i. FIND b IN SECTION OFFSET off OF a MATCH OFFSET moff &

【BZOJ】3916: [Baltic2014]friends

http://www.lydsy.com/JudgeOnline/problem.php?id=3916 #include <bits/stdc++.h> using namespace std; int n, ans[3]; char s[2000005]; void work(int now) { int l=1, r=n-(n>>1); if(now<2) ++r; int flag=0; //printf("%d\n", now); for(int

bzoj3918 [Baltic2014]Postman

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3918 [题解] 每日至少更一题啊qwq凑任务(迷 明显猜个结论:随便搜环就行了 然后搜环姿势错了我也很无奈啊... # include <stdio.h> # include <string.h> # include <algorithm> // # include <bits/stdc++.h> using namespace std; typede

BZOJ3916: [Baltic2014]friends

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 复习一下hash(然后被傻叉错误卡了半天TAT... 取出一个字串:h[r]-h[l-1]*power[r-l+1]  然后匹配... 注意一下当前需要的是s[i]还是s[i-1],做hash数组时不要写s[i]-'A',写s[i],否则容易被卡 对于这道题,枚举一下断点,注意判重. 对于这种有断点的前面一段+后面一段等于完整一段,要注意前面那一段乘的权. #include<cstri

最牛B的防火配置(禁掉某个域名和其下的所有二,三级域名)

-A INPUT -p tcp --dport 80 -m string --string *.(自已的域名).com --algo bm -j ACCEPT -A INPUT -p tcp --dport 80 -m string --string *.renweiba.com --algo bm -j DROP -A INPUT -p tcp --dport 80 -m string --string vip.renweiba.com --algo bm -j DROP -A INPUT -

BZOJ3919 : [Baltic2014]portals

预处理出每个点上下左右能延伸到的最远点以及到它们的距离的最小值md. 然后spfa,一个点除了可以以1的代价到达四周的点之外,还可以以md+1的代价到达四个方向能到达的最远点. #include<cstdio> const int N=1010,M=4194303; int n,m,i,j,z,x,y,loc[N][N][4],dis[N][N][4],md[N][N],d[N][N],q[M+1][2],h,t; bool a[N][N],in[N][N];char s[N]; inline