1 条题解
-
0
C++ :
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 1005 int p[MAX][MAX]; int check(int a,int b,int ans){ int temp=p[a][b]; for(int i=0;i<ans;i++) for(int j=0;j<ans;j++){ if(p[a+i][b+j]!=temp)return 0; } return 1; } int main(void){ int a,b; scanf("%d%d",&a,&b); int mmax; if(a>b)mmax=a; else mmax=b; int ans=0; for(int i=0;i<a;i++) for(int j=0;j<b;j++) scanf("%d",&p[i][j]); for(int i=0;i<a;i++) for(int j=0;j<b;j++) for(int k=ans+1;k<=mmax;k++){ if(i+k<=mmax&&j+k<=mmax) if(check(i,j,k)) ans=k; else break; } printf("%d",ans*ans); return 0; }
Java :
import java.util.*; public class Main { public static int AC[][]=new int[200][200]; public static boolean square(int i,int j,int b){ int flag=AC[i][j]; for(int x=0;x<b;x++){ for(int y=0;y<b;y++){ if(AC[i+x][j+y]!=flag) return false; } } return true; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int R=sc.nextInt(); int C=sc.nextInt(); int maxBC=Math.min(R, C);//最大边长不可超过矩形最短边 //传入数组 for(int x=0;x<R;x++){ for(int y=0;y<C;y++){ AC[x][y]=sc.nextInt(); } } int max=0;//正方形最大边长 int b;//正方形边长 for(int x=0;x<R;x++){ for(int y=0;y<C;y++){ for(b=max+1;b<=maxBC;b++){ if(x+b<=R&&y+b<=C){ if(square(x,y,b)) max=b; else continue; } } } } System.out.println(max*max); } }
- 1
信息
- ID
- 2774
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者