码迷,mamicode.com
首页 > 其他好文 > 详细

P4888 三去矩阵

时间:2018-09-23 22:25:13      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:const   cstring   int   turn   map   class   ret   cli   using   

P4888 三去矩阵

给出一个字符矩阵, 多次询问求以 \((x, y)\) 为中心的最长回文串长度(即横竖两种)
\(l, q <= 2000\)

Solution

数据范围小直接模拟即可

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
using namespace std;
int RD(){
    int out = 0,flag = 1;char c = getchar();
    while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
    while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
    return flag * out;
    }
const int maxn = 4019;
int len, na;
char map[maxn][maxn];
int get_max(int x, int y){
    int ans = -1, lenth = 1;
    while(x + lenth <= len && x - lenth >= 1){
        if(map[x + lenth][y] == map[x - lenth][y])lenth++;
        else break;
        }
    ans = lenth, lenth = 1;
    while(y + lenth <= len && y - lenth >= 1){
        if(map[x][y + lenth] == map[x][y - lenth])lenth++;
        else break;
        }
    ans = max(ans, lenth);
    return 2 * ans - 1;
    }
int main(){
    len = RD(), na = RD();
    for(int i = 1;i <= len;i++)for(int j = 1;j <= len;j++)cin>>map[i][j];
    for(int i = 1;i <= na;i++){
        int x = RD(), y = RD();
        printf("%d\n", get_max(x, y));
        }
    return 0;
    }

P4888 三去矩阵

标签:const   cstring   int   turn   map   class   ret   cli   using   

原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9693634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!