• 【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果然神器,省了不少代码啊……

  • 相关阅读:
    使用Cmake生成makefile
    c++模板类(一)理解编译器的编译模板过程
    C++ 模板
    c++/c 获取cpp文件行号跟文件名
    java获取代码调用位置信息
    android获取手机ip
    Cocos2d-html5游戏开发,常用工具集合
    cocos2d-html5基础
    Cocos2d-x-html5之HelloWorld深入分析与调试
    基于ndk_r7_windows编译实现ndk项目,不需要cygwin
  • 原文地址:https://www.cnblogs.com/ghostll/p/3561214.html
Copyright © 2020-2023  润新知