• UVA-201,紫书此处有错


    这个题数据小,所以我们暴力可解,思路是这样的:    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("
    **********************************
    
    ");
    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
    
    ",con);
    55     for(int i=1;i<=n;i++)
    56         if(len[i]!=0){
    57             flag++;
    58             printf("%d square (s) of size %d
    ",len[i],i);
    59         }
    60     if(flag==0)
    61         printf("No completed squares can be found.
    ");
    62 }
    63 }
  • 相关阅读:
    SwiftUI使用URLSession发送https请求免证书验证
    IOS 时间格式 格式化说明
    句柄,文件描述符的理解
    Docker Swarm(8)
    Docker 自己的理解(9)
    eclipse导入idea项目
    写写最近的感悟为什么好久没更
    linux 命令行实现CPU 100%占用
    2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》
    1.为什么要从古典概率入门概率学《zobol的考研概率论教程》
  • 原文地址:https://www.cnblogs.com/3532gll/p/9416446.html
Copyright © 2020-2023  润新知