• Ugly Window 【acm题】


    话说好久没有碰acm题目了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    看到Ugly Window这道题目,没有多想,就直接先找到字母的连续长度和连续高度,并统计该字母的总个数,然后用w*h == total+4(四个角落)判断矩形完整不,呜呜,提交后WA了才想到还有可能嵌套的呀呀呀~然后我就打算把矩形的起点和尾点都找出来,然后想到是否还有更好的想法呢?之后我就上网搜了一下,发现了直接找到该字母的连续长度和连续高度后判断中间是否全部为‘.’,周边是否全部为该字母的办法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    上代码吧~

    (好久没有单纯的用C语言写过代码了,这次写的时候小心翼翼的~)

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #define CHARNUM 27
      5 #define MAXNUM 110
      6 
      7 
      8 int main()
      9 {
     10     int n,m;
     11     char myChar[MAXNUM][MAXNUM];
     12     int vis[CHARNUM];
     13     int flag;
     14 
     15     int i,j,s,t,width,height;
     16 
     17     while(scanf("%d%d",&n,&m) != EOF)
     18     {
     19         memset(vis,0,sizeof(vis));
     20 
     21         for(i = 0;i < n;i ++)
     22         {
     23             scanf("%s",myChar[i]);
     24         }
     25         
     26         for(i = 0; i < n-1;i ++)
     27         {
     28             for(j = 0;j < m - 1;j ++)
     29             {
     30                 if(myChar[i][j] == '.')
     31                     continue;
     32 
     33                 if(vis[myChar[i][j] - 'A'] != 0)
     34                 {
     35                     continue;
     36                 }
     37 
     38                 flag = 1;
     39                 for(s = i + 1;;s ++)
     40                 {
     41                     if(myChar[s][j] != myChar[i][j])
     42                     {
     43                         break;
     44                     }
     45                 }
     46                 height = s - i;
     47 
     48                 for(s = j + 1;;s ++)
     49                 {
     50                     if(myChar[i][s] != myChar[i][j])
     51                         break;
     52                 }
     53                 width = s - j;
     54 
     55                 for(s = i + 1; flag && s < i + height - 1; s ++)
     56                 {
     57                     for(t = j + 1;t < j + width - 1; t ++)
     58                     {
     59                         if(myChar[s][t] != '.')
     60                         {
     61                             flag = 0;
     62                             break;
     63                         }
     64                     }
     65                 }
     66 
     67                 for(s = j + 1; flag && s < j + width; s ++)
     68                 {
     69                     if(myChar[i+height - 1][s] != myChar[i][j])
     70                     {
     71                         flag = 0;
     72                         break;
     73                     }
     74                 }
     75 
     76                 for(s = i + 1;flag && s < i + height;s ++)
     77                 {
     78                     if(myChar[s][j+width-1] != myChar[i][j])
     79                     {
     80                         flag = 0;
     81                         break;
     82                     }
     83                 }
     84 
     85                 if(width == 1 || height == 1)
     86                     flag = 0;
     87 
     88                 if(flag)
     89                 {
     90                     vis[myChar[i][j] - 'A'] = 1;
     91                 }
     92             }
     93         }
     94 
     95         for(i = 0; i < 27;i ++)
     96         {
     97             if(vis[i] == 1)
     98             {
     99                 printf("%c",i+'A');
    100             }
    101         }
    102 
    103         puts("");
    104     }
    105 
    106 
    107     return 0;
    108 }
    代码如下:
  • 相关阅读:
    【转】 springBoot(5)---单元测试,全局异常
    【转】 springBoot(4)---热部署,配置文件使用
    【转】 springBoot(3)---目录结构,文件上传
    【转】 springBoot(2)---快速创建项目,初解jackson
    【转】 springBoot(1)---springboot初步理解
    【转】 SpringBoot+MyBatis+MySQL读写分离
    简单请求 vs 非简单请求
    H5新增的API
    图片
    vue更新dom的diff算法
  • 原文地址:https://www.cnblogs.com/Shirlies/p/3330665.html
Copyright © 2020-2023  润新知