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 }
  • 相关阅读:
    jq 自定义动画案例
    jq 左右轮播图案例
    hdu-5728 PowMod(数论)
    UVA-11892(组合游戏)
    UVA-12293(组合游戏)
    LA-5059(组合游戏)
    hdu-5724 Chess(组合游戏)
    hdu-5750 Dertouzos(数论)
    hdu-5748 Bellovin(LIS)
    hdu-5747 Aaronson(水题)
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3338983.html
Copyright © 2011-2022 走看看