1. 程式人生 > >UVA-201,紫書此處有錯

UVA-201,紫書此處有錯

com 情況 color == amp int printf 數據 using

這個題數據小,所以我們暴力可解,思路是這樣的: heng[ i ] [ j ] 一旦是 1 , 就意味著,在( i,j )這個點出發有個 向右的線。 zhi[][] 同理,向下的線。然後枚舉所有邊的情況,一旦judge 函數在某個點,找到了某個 以 len 為邊的 完整的方形(len,x,y),就返回1

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int zhi[11][11],heng[11][11]; 
 5 int len[11];
 6 int judge(int len,int x,int
y){ 7 for(int i=0;i<len;i++){ //邊是由線段構成的,一旦有哪個段不成立,立即退出。 8 if(zhi[x][y+i]==0) //從左上角 一直到 左下角 9 return -1; 10 if(heng[x+i][y]==0) //從左上角 一直到 右上角 11 return -1; 12 if(zhi[x+len][y+i]==0) //從 右上角 一直到右下角 13 return -1; 14 if
(heng[x+i][y+len]==0) //從左下角 一直到 右下角 15 return -1; 16 } 17 return 1; //都走完了,成立 18 } 19 20 int main(){ 21 int n,m,k; 22 int t1,t2; 23 char c,cc,ccc,cccc; 24 int con=0; 25 while(++con && cin>>n>>m){ 26 memset(zhi,0,sizeof(zhi));
27 memset(heng,0,sizeof(heng)); 28 memset(len,0,sizeof(len)); 29 30 for(int i=0;i<m;i++){ 31 scanf("%c%c%c%d%c%d",&cccc,&c,&cc,&t1,&ccc,&t2); 32 33 if(c==H) {/*cout<<"sss"<<endl; */ zhi[t1][t2]=1; } 34 if(c==V) heng[t2][t1]=1; //註意,我說的紫書錯的地方就在這裏,你如果按劉老師寫的,那是 heng[t1][t2]=1,我一直卡這裏,後來改成符合原題的,ac 35 } 36 37 if(con!=1) printf("\n**********************************\n\n"); 38 for(int i=1;i<=n;i++){ 39 for(int x=1;x<=n-i+1;x++){ //壓縮 40 for(int y=1;y<=n-i+1;y++){ //壓縮 41 42 if(judge(i,x,y) == 1) 43 { 44 //cout<<"ok"<<endl; 45 len[i]++; 46 } 47 48 } 49 } 50 } 51 52 int flag=0; 53 54 printf("Problem #%d\n\n",con); 55 for(int i=1;i<=n;i++) 56 if(len[i]!=0){ 57 flag++; 58 printf("%d square (s) of size %d\n",len[i],i); 59 } 60 if(flag==0) 61 printf("No completed squares can be found.\n"); 62 } 63 }

UVA-201,紫書此處有錯