zoukankan      html  css  js  c++  java
  • HDU 6400(括号组合 ~)

    题意是说在 h 行 w 列的矩阵中,通过设计使得尽可能多的行或列能满足题中的平衡条件。

    如果行数(列数)是奇数,那么每一列(行)一定不能平衡,就要按照满足每一行(列)平衡,输出“ () “;若行数和列数同时是奇数,则设计不出任何一行或一列平衡;

    当行数和列数同时为偶数时,情况是最复杂的,开始的时候只是想到两个数字谁大就去满足谁的平衡,结果完全不对,因为不只是“ ()()() ”是平衡的,像“ ((())) ”这种也是平衡的。也就是说在行满足平衡条件的同时列也可能满足平衡条件,比如:

    " (((( " 就在满足每一列平衡的同时多满足了一行,然后......然后我智商就不够了。看了别人的博客才知道,可以通过“牺牲”掉最外面的一圈,也就是两行和两列,其他各行各列就都能平衡,也就是都能达到 ans = h + w - 4 ;但是在行数和列数的最小值小于 4 的时候,这种

      ()()     “牺牲”的做法并不是最优的,此时通过暴力的方法去枚举找到(2,2),(2,4),(4,2),(4,4)的图案即可。

      )()(    这种做法是怎么想出来的呢?请移步去大佬的博客吧.......

      ))))

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 int main()
      4 {
      5     int t,a,b;
      6     scanf("%d",&t);
      7     while(t--)
      8     {
      9         scanf("%d%d",&a,&b);
     10         if((a&1)&&(b&1))
     11         {
     12             for(int i = 0; i < a; i++)
     13             {
     14                 for(int j = 0; j < b; j++)
     15                     printf("(");
     16                 printf("
    ");
     17             }
     18         }
     19         else if((a&1)&&!(b&1))
     20         {
     21             for(int i = 0; i < a; i++)
     22             {
     23                 for(int j = 0; j < b; j++)
     24                     if(j&1) printf(")");
     25                     else printf("(");
     26                 printf("
    ");
     27             }
     28         }
     29         else if(!(a&1)&&(b&1))
     30         {
     31             for(int i = 0; i < a; i++)
     32             {
     33                 for(int j = 0; j < b; j++)
     34                     if(i&1) printf(")");
     35                     else printf("(");
     36                 printf("
    ");
     37             }
     38         }
     39         else
     40         {
     41 /*            if(a > b)
     42             {
     43                 for(int i = 0; i < a; i++)
     44                 {
     45                     for(int j = 0; j < b; j++)
     46                         if(j&1) printf(")");
     47                         else printf("(");
     48                     printf("
    ");
     49                 }
     50             }
     51             else
     52             {
     53                 for(int i = 0; i < a; i++)
     54                 {
     55                     for(int j = 0; j < b; j++)
     56                         if(i&1) printf(")");
     57                         else printf("(");
     58                     printf("
    ");
     59                 }
     60             }
     61 */
     62             if(a==2 && b==2)
     63             {
     64                 puts("()");
     65                 puts(")(");
     66                 continue;
     67             }
     68             if(b==2)
     69             {
     70                 for(int i = 0; i < a; i++)
     71                     puts("()");
     72                 continue;
     73             }
     74             if(a==2)
     75             {
     76                 for(int i = 0; i < b; i++)
     77                     printf("(");
     78                 printf("
    ");
     79                 for(int i = 0; i < b; i++)
     80                     printf(")");
     81                 printf("
    ");
     82                 continue;
     83             }
     84             if(a==4)
     85             {
     86                 for(int i = 0; i < b; i++)
     87                     printf("(");
     88                 printf("
    ");
     89                 for(int i = 0; i < b; i++)
     90                 {
     91                     if(i < b/2)printf(")");
     92                     else printf("(");
     93                 }
     94                 printf("
    ");
     95                 for(int i = 0; i < b; i++)
     96                 {
     97                     if(i < b/2)printf("(");
     98                     else printf(")");
     99                 }
    100                 printf("
    ");
    101                 for(int i = 0; i < b; i++)
    102                     printf(")");
    103                 printf("
    ");
    104                 continue;
    105             }
    106             if(b==4)
    107             {
    108                 for(int i = 0; i < a; i++)
    109                 {
    110                     if(i < a/2) puts("()()");
    111                     else puts("(())");
    112                 }
    113                 continue;
    114             }
    115             for(int i = 0; i < a; i++)
    116             {
    117                 for(int j = 0; j < b; j++)
    118                 {
    119                     if(i == 0|| j == 0) printf("(");
    120                     else if(i == a-1 || j == b-1) printf(")");
    121                     else
    122                     {
    123                         if(j == 0) printf("(");
    124                         else if(j == b-1) printf(")");
    125                         else
    126                         {
    127                             if(!(i&1))
    128                                 if(j&1) printf("(");
    129                                 else printf(")");
    130                             else
    131                                 if(j&1) printf(")");
    132                                 else printf("(");
    133                         }
    134                     }
    135                 }
    136                 printf("
    ");
    137             }
    138         }
    139     }
    140     return 0;
    141 }
    View Code
    日后若能有更好的想法,再来完善。 希望看到的大神不吝赐教 orz
  • 相关阅读:
    c3p0用c3p0-config.xml方式配置 和 用spring配置时一点小区别
    mysql配置
    tomcat监控工具Probe
    tomcat配置
    jsp页面动态包含和静态包含
    servlet3的文件上传
    System.currentTimeMillis()和new Date().getTime()比较
    js-html2canvas导出html图片 导出pdf
    html中使用富文本编辑器
    Vue----vue-resource
  • 原文地址:https://www.cnblogs.com/Taskr212/p/9490290.html
Copyright © 2011-2022 走看看