1 solutions
-
0
C++ :
#include<iostream> #include<cstdio> using namespace std; int n; char map[255][255]; int squ[255]; void ju(){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(map[i][j]=='1'){ int flag=0; for(int k=1;;k++){ for(int x=0;x<=k;x++){ for(int y=0;y<=k;y++){ if(map[i+x][j+y]!='1'){ flag=1;break; } } if(flag==1)break; } if(flag==1)break; squ[k+1]++; } } } } } void aa(){ } int main(){ cin>>n; for(int i=0;i<n;i++){ scanf("%s",&map[i]); } ju(); for(int i=2;i<=n;i++){ if(squ[i]!=0)cout<<i<<" "<<squ[i]<<endl; } return 0; }Pascal :
var i,j,k,m,n,p,ans:Longint; ak:array[0..100000,0..30] of longint; w:array[0..100000] of longint; st:array[0..100000] of int64; ss:string; d:array[0..30] of longint; begin d[1]:=1; for i:=2 to 30 do d[i]:=d[i-1]*2; read(n,k); for i:=1 to n do read(w[i]); for i:=1 to n do begin p:=1; while w[i]>0 do begin if w[i] mod 2=1 then inc(ak[i,p]); w[i]:=w[i] div 2; inc(p); end; end; for i:=1 to n do for j:=1 to 30 do ak[i,j]:=ak[i-1,j]+ak[i,j]; for i:=1 to n do begin m:=ak[i,1]; for j:=1 to 30 do ak[i,j]:=ak[i,j]-m; end; for i:=1 to n do for j:=1 to 30 do if ak[i,j]<0 then ak[i,j]:=0; for i:=1 to n do for j:=1 to 30 do st[i]:=st[i]+ak[i,j]*d[j]; for i:=1 to n do for j:=i+1 to n do if st[i]=st[j] then if j-i>ans then ans:=j-i; writeln(ans); end.
- 1
Information
- ID
- 19406
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By