zoukankan      html  css  js  c++  java
  • 翻纸牌游戏

    翻纸牌游戏

    Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 6   Accepted Submission(s) : 2

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    Problem Description

    有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌。但是麻烦的是,每当你翻一张纸牌(由正翻到反,或者有反翻到正)时,他左右两张纸牌(最左边和最右边的纸牌,只会影响附近一张)也必须跟着翻动,现在给你一个乱的状态,问你能否把他们整理好,使得每张纸牌都正面朝上,如果可以,最少需要多少次操作。

    Input

    有多个case,每个case输入一行01符号串(长度不超过20),1表示反面朝上,0表示正面朝上。

    Output

    对于每组case,如果可以翻,输出最少需要翻动的次数,否则输出NO。

    Sample Input

    01
    011
    

    Sample Output

    NO
    1
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define INF 1 << 30;
     4 int a[25],cnt[25];
     5 int len,temp,ans;
     6 int OK()
     7 {
     8     int i;
     9     for(i = 0;i < len;i ++)
    10         if(a[i])
    11             return 0;
    12     return 1;
    13 }
    14 
    15 void dfs(int index)
    16 {
    17     int i;
    18     if(OK())
    19     {
    20         temp = 0;
    21         for(i = 0;i < len;i ++)
    22             if(cnt[i] == 1)
    23                 temp++;
    24         if(temp < ans)
    25             ans = temp;
    26         return ;
    27     }
    28     if(index >= len)
    29         return ;
    30     for(cnt[index] = 0;cnt[index] < 2; )
    31     {
    32         a[index] ^= 1;
    33         if(index > 0)
    34             a[index-1] ^= 1;
    35         if(index < len-1)
    36             a[index+1] ^= 1;
    37         cnt[index]++;
    38         dfs(index+1);
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     int i;
    45     char str[22];
    46     while(~scanf("%s",str))
    47     {
    48         len = strlen(str);
    49         for(i = 0;i < len;i ++)
    50             a[i] = str[i]-'0';
    51         ans = INF;
    52         memset(cnt,0,sizeof(cnt));
    53         dfs(0);
    54         if(ans!= 1<<30)
    55             printf("%d
    ",ans);
    56         else
    57             printf("NO
    ");
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    利用递归分割(Split)字符串
    SQL Server2012 T-SQL基础教程--读书笔记(1-4章)
    kindeditor编辑器的使用
    echarts绘制四川地图
    Windows下搭建PHP开发环境(Apache+PHP+MySQL)+调试工具Xdebug的配置
    给搜索关键字添加高亮,加以颜色区分
    SQL 生成6位随机数并MD5加密输出
    微信小程序登录 .net 后端实现
    钉钉小程序http post 请求
    浅谈Web Api配合SignalR的跨域支持
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3338983.html
Copyright © 2011-2022 走看看