• hdu 2209 翻纸牌游戏


    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=2209

    这个题难度还可以

    我的思路:有n张牌成第一张牌开始如果是1,则第一张第二张第三张翻转,再看第二张,判断如果是1则第二张第三张第四张翻转,以此下去

    不这样还不可以,还得分两种情况如001 按这种思路是不可以的所以还有一种情况不管如何先翻转第一和第二张牌再如上一种思路。

    我的AC代码

    第一种写法:直接法

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;

    int a[30];
    char str[30];

    int main(void)
    {
    int i,ans;
    int f1,f2;
    while(scanf("%s",str)==1)
    {
    int len=strlen(str);
    int k1,k2;
    f1=0; f2=0;
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    a[0]=!a[0];
    a[1]=!a[1];
    k1=1;
    for(i=1;i<len;i++)
    {
    if(a[i-1])
    {
    a[i-1]=!a[i-1];
    a[i]=!a[i];
    a[i+1]=!a[i+1];
    k1++;
    }
    }
    if(a[len-1]==0)
    f1=1;
    k2=0;
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    for(i=1;i<len;i++)
    {
    if(a[i-1])
    {
    a[i-1]=!a[i-1];
    a[i]=!a[i];
    a[i+1]=!a[i+1];
    k2++;
    }
    }
    if(a[len-1]==0)
    f2=1;
    if(f1&&f2)
    {
    if(k1>k2)
    printf("%d ",k2);
    else
    printf("%d ",k1);
    }
    else if(f1)
    printf("%d ",k1);
    else if(f2)
    printf("%d ",k2);
    else
    printf("NO ");
    }
    return 0;
    }

    第二种写法:递归

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;

    int a[30];
    char str[30];
    const int inf=1<<30;

    int main(void)
    {
    int dfs(int i,int len,int k);
    int i;
    while(scanf("%s",str)==1)
    {
    int ans=inf;
    int len=strlen(str);
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    a[0]=!a[0];
    a[1]=!a[1];
    ans=min(ans,dfs(1,len,1));
    for(i=0;i<len;i++)
    a[i]=str[i]-'0';
    ans=min(ans,dfs(1,len,0));
    if(ans==inf)
    printf("NO ");
    else
    printf("%d ",ans);
    }
    return 0;
    }

    int dfs(int i,int len,int k)
    {
    if(i==len)
    {
    if(a[i-1])
    return inf;
    else
    return k;
    }
    if(a[i-1])
    {
    a[i-1]=!a[i-1];
    a[i]=!a[i];
    a[i+1]=!a[i+1];
    k++;
    }
    dfs(i+1,len,k);
    }

  • 相关阅读:
    洛谷P2798 爆弹虐场
    洛谷P1164 小A点菜(01背包求方案数)
    洛谷P1312 Mayan游戏
    洛谷P1514 引水入城
    2017-10-12 NOIP模拟赛
    洛谷P1038 神经网络
    洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle
    洛谷P1378 油滴扩展
    Ionic+Angular实现中英国际化(附代码下载)
    Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示(附代码下载)
  • 原文地址:https://www.cnblogs.com/liudehao/p/3919290.html
Copyright © 2020-2023  润新知