1 条题解
-
0
C++ :
#include <iostream> #include <stdio.h> using namespace std; char k[2005][2005]; long long n; long long max(long long a,long long b) { if (a>b) return a; else return b; } long long maxxx(long long a,long long b,long long c,long long d) { return max(max(a,b),max(c,d)); } long long dfs(long long i,long long j,char c ) { if (c=='#') return 0; long long ans1=0,ans2=0,ans3=0,ans4=0; for (long long s=i;s<n;s++){ if (k[s][j]==c) ans1++; else break; } for (long long s=i;s>=0;s--){ if (k[s][j]==c) ans2++; else break; } for (long long s=j;s<n;s++){ if (k[i][s]==c) ans3++; else break; } for (long long s=j;s>=0;s--){ if (k[i][s]==c) ans4++; else break; } long long anss1=0,anss2=0,anss3=0,anss4=0; for (long long s=0;;s++){ if (i+s<n&&j+s<n){ if (k[i+s][j+s]==c) anss1++; else break; } else break; } for (long long s=0;;s++){ if (i-s>=0&&j-s>=0){ if (k[i-s][j-s]==c) anss2++; else break; } else break; } for (long long s=0;;s++){ if (i+s<n&&j-s>=0){ if (k[i+s][j-s]==c) anss3++; else break; } else break; } for (long long s=0;;s++){ if (i-s>=0&&j+s<n){ if (k[i-s][j+s]==c) anss4++; else break; } else break; } return maxxx(ans1+ans2-1,ans3+ans4-1,anss1+anss2-1,anss3+anss4-1); } int main() { while(~scanf("%lld",&n)&&n){ getchar(); for (long long i=0;i<n;i++){ for (long long j=0;j<n;j++){ cin>>k[i][j]; } } for (long long i=0;i<n;i++){ for (long long j=0;j<n;j++){ if (j) printf(" "); printf("%lld",dfs(i,j,k[i][j])); } printf("\n"); } } return 0; }
- 1
信息
- ID
- 1463
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者