P4888
题目
题目描述
现在小Y有个l×l的正方形字母矩阵,现在他想进行q次询问,每次询问最长的以(x_i,y_i)为中心的在一条水平或竖直的直线上的回文串的长度。
输入格式
第一行输入两个整数l,q,分别表示矩阵的边长和询问的个数。
接下来的l行,每行l个字母,表示这个矩阵上的字母。
接下来的q行,每行两个整数x_i,y_i,表示第ii个询问为在询问矩阵中最长的以(x_i,y_i)为中心的在一条直线上的回文串的长度。
输出格式
输出q行,第i行为对于第i个询问的回答。
输入输出样例
输入 #1
5 5
abcba
bcdcb
cdedc
bcdcb
abcba
1 1
1 2
1 3
2 3
3 3
输出 #1
1
1
5
5
5
说明/提示
对于20%的数据,1≤l≤2
另有20%的数据,q = 1
另有20%的数据,字母矩阵中心对称,上下对称,左右对称且对角线对称。
对于100%的数据,1≤l,q≤2000,字母只有小写字母。
思路
思路:读入字符数组,数据范围小,直接枚举所有以c[x][y]为中心的回文串,存入f[x][y]。数据范围大就用dfs。
#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
char c[2001][2001];
int f[2001][2001];
int main()