zoukankan      html  css  js  c++  java
  • 【stack果然神器】code forces 394C Dominoes

    code forces   394C   Dominoes               题目链接:http://codeforces.com/problemset/problem/394/C

    题目大意:用一个两位数字组合描述一张多米诺骨牌,这两位数字只可能取0或1,这样骨牌就一共有四种(“00”、“11”、“10”、“01“),给出两个整数m、n代表有m行n列的骨牌,下面给出这组m×n的骨牌排列(两个骨牌之间有一空格)。得到排列后统计每一列有多少个”1“,设num为其最大值,然后打乱重排,目的是使重排后的num最小。

    题目分析:

            贪心法。先放11,再放10或01(由于重排时可以旋转180°,所以10和01没有区别),最后放00.

            蛇形排列。排第一、三、五……行时从左向右放,反之从右向左放。

    code:

     

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. #include<cstdio>  
    2. #include<stack>  
    3. #include<queue>  
    4. using namespace std;  
    5. int main()  
    6. {  
    7.     int m,n,i,j,c00=0,c11=0,c01=0;  
    8.     stack<char>s;  
    9.     char c[4];  
    10.     scanf("%d%d",&m,&n);  
    11.     for(i=0;i<n*m;i++)  
    12.     {  
    13.         scanf("%s",c);  
    14.         switch(c[0]+c[1])  
    15.         {  
    16.             case 96:c00++;break;  
    17.             case 97:c01++;break;  
    18.             case 98:c11++;  
    19.         }  
    20.     }  
    21.     for(i=0;i<m;i++)  
    22.     {  
    23.         if(i%2)  
    24.         for(j=0;j<n;j++)  
    25.         {  
    26.             if(c11)  
    27.             {  
    28.                 s.push(j==0?' ':' ');  
    29.                 s.push('1');  
    30.                 s.push('1');  
    31.                 c11--;  
    32.             }  
    33.             else if(c01)  
    34.             {  
    35.                 s.push(j==0?' ':' ');  
    36.                 s.push('0');  
    37.                 s.push('1');  
    38.                 c01--;  
    39.             }  
    40.             else  
    41.             {  
    42.                 s.push(j==0?' ':' ');  
    43.                 s.push('0');  
    44.                 s.push('0');  
    45.             }  
    46.         }  
    47.         else  
    48.         for(j=0;j<n;j++)  
    49.         {  
    50.             if(c11)  
    51.             {  
    52.                 printf("%s%s","11",j==n-1?" ":" ");  
    53.                 c11--;  
    54.             }  
    55.             else if(c01)  
    56.             {  
    57.                 printf("%s%s",i%2?"10":"01",j==n-1?" ":" ");  
    58.                 c01--;  
    59.             }  
    60.             else printf("%s%s","00",j==n-1?" ":" ");  
    61.         }  
    62.         while(!s.empty())printf("%c",s.top()),s.pop();  
    63.     }  
    64.     return 0;  
    65. }  

    PS:stack果然神器,省了不少代码啊……

  • 相关阅读:
    MS CRM 2011 RC中的新特性(4)——活动方面之批量编辑、自定义活动
    最近的一些有关MS CRM 2011的更新
    MS CRM 2011 RC中的新特性(6)——连接
    MS CRM 2011 RC中的新特性(7)—仪表板
    参加MS CRM2011深度培训课程——第一天
    MS CRM 2011插件调试工具
    MS CRM2011实体介绍(四)——目标管理方面的实体
    MS CRM 2011 RC中的新特性(3)——客户服务管理方面
    MS CRM 2011 RC中的新特性(8)—数据管理
    ExtAspNet 登陆
  • 原文地址:https://www.cnblogs.com/ghostll/p/3561214.html
Copyright © 2011-2022 走看看