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; }
Java :
import java.io.*; import java.util.*; import java.util.regex.*; public class Main { public static void main(String[] args){ fun(); } public static void fun(){ Scanner sc = new Scanner(new BufferedInputStream(System.in)); int n = Integer.parseInt(sc.nextLine()); byte[][] bs = new byte[n][n]; short[][] ss = new short[n][n]; for(int i=0;i<n;i++){ String line = sc.nextLine(); for(int j=0,k=0;j<line.length();j+=2){ bs[i][k++]=(byte)(line.charAt(j)); } } seek(bs,ss); print(ss); } static final byte BLANK = (byte)'#'; public static void print(short[][] ss){ int n=ss.length; if(n==0)return; for(int i=0;i<n;i++){ for(int j=0;j<n-1;j++){ System.out.print(ss[i][j]+" "); } System.out.println(ss[i][n-1]); } } public static void seek(byte[][] bs,short[][] ss){ int n=ss.length; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ ss[i][j]=max(seekV(bs,i,j),seekH(bs,i,j),seekDuiJiao(bs,i,j)); } } } static short max(int a,int b,int c){ a = Math.max(a,b); a=Math.max(a,c); return (short)a; } public static int seekV(byte[][] bs,int i,int j){ if(bs[i][j]==BLANK)return 0; int n=1; for(int k=i-1;k>=0;k--){ if(bs[k][j]==bs[i][j])n++; else break; } for(int k=i+1;k<bs.length;k++){ if(bs[k][j]==bs[i][j])n++; else break; } return n; } public static int seekH(byte[][] bs,int i,int j){ if(bs[i][j]==BLANK)return 0; int n=1; for(int k=j-1;k>=0;k--){ if(bs[i][k]==bs[i][j])n++; else break; } for(int k=j+1;k<bs.length;k++){ if(bs[i][k]==bs[i][j])n++; else break; } return n; } public static int seekDuiJiao(byte[][] bs,int i,int j){ if(bs[i][j]==BLANK)return 0; int n=1; int len = i<j?i:j; for(int m=1;m<=len;m++){ if(bs[i-m][j-m]==bs[i][j])n++; else break; } len = bs.length-i<bs.length-j?bs.length-i:bs.length-j; len--; for(int m=1;m<len;m++){ if(bs[i+m][j+m]==bs[i][j])n++; else break; } return n; } }
- 1
信息
- ID
- 2866
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者