突然感觉Ural的难度分类有点扯. . . . . .
dp[ i ][ j ][ k ] 表示在第K个方向上连续的个数。
#include <iostream> #include <algorithm> #include <cstdlib> #include <cstdio> #include <cstring> #include <queue> #include <cmath> #include <stack> #pragma comment(linker, "/STACK:1024000000"); #define EPS (1e-8) #define LL long long int #define ULL unsigned long long int #define _LL __int64 #define _INF 0x3f3f3f3f #define INF 4000000 #define Mod 1000000009 using namespace std; char s[1403][1403]; int dp[1403][1403][4]; int jx[] = { 0,-1,-1,-1}; int jy[] = {-1,-1, 0, 1}; int main() { int n; int i,j,k; cin>>n; memset(dp,0,sizeof(dp)); for(i = 1;i <= n; ++i) { cin>>(s[i]+1); } int M1 = -1,M2 = -1; for(i = 1;i <= n; ++i) { for(j = 1;j <= n; ++j) { for(k = 0;k < 4; ++k) { if(i+jx[k] == 0 || j+jy[k] == 0 || i+jx[k] == n+1 || j+jy[k] == n+1 || s[i][j] == s[i+jx[k]][j+jy[k]]) dp[i][j][k] = max(dp[i][j][k],dp[i+jx[k]][j+jy[k]][k]+1); else dp[i][j][k] = 1; if(s[i][j] == ‘S‘) { M1 = max(M1,dp[i][j][k]); } else { M2 = max(M2,dp[i][j][k]); } } } } if(M1 > M2) { cout<<"S"<<endl; cout<<M1<<endl; } else if(M1 < M2) { cout<<"s"<<endl; cout<<M2<<endl; } else { cout<<"?"<<endl; cout<<M1<<endl; } return 0; }
Ural 1287. Mars Canals,布布扣,bubuko.com
原文:http://blog.csdn.net/zmx354/article/details/20860743