洛谷P4888 三去矩阵
这么水的题居然没有人发题解,那就来水一波
安利一下自己的blog,大家可以互相学习
本题就是一个非常简单的模拟题,对于每一个询问,先算出回文串最大可能长度,然后暴力比较是否回文,一旦找到不同的就停止搜索,输出现在的长度*2+1(该坐标的数需要计算)。即可找出答案
附ac代码
#include<bits/stdc++.h> using namespace std; const int Maxn=2010; int l,q,x,y,d,maxn; int num[Maxn][Maxn]; int main(){ scanf("%d %d",&l,&q); for(int i=1;i<=l;++i){ char s[Maxn]; for(int j=1;j<=l;++j){ cin>>s[j]; num[i][j]=s[j]-'a'+1; } } while(q--){ maxn=0; scanf("%d %d",&x,&y); int dx=min(x-1,l-x); int dy=min(y-1,l-y); int i; for(i=1;i<=dx;i++) if(num[x-i][y]!=num[x+i][y]) break; maxn=max(2*i-1,maxn); for(i=1;i<=dy;i++) if(num[x][y-i]!=num[x][y+i]) break; maxn=max(2*i-1,maxn); printf("%d\n",maxn); } return 0; }