C - 翻纸牌游戏

Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice HDU 2209

Description

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

Input

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

Output

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

Sample Input

01
011

Sample Output

NO
1

自己写的贪心是直接遍历翻,一直wa,后来问别人,应该先枚举一下,两种情况,翻第一个和不翻第一个,然后在遍历找这两个里能翻成功的次数最小的,为什么要特殊枚举第一个点呢,仔细想想,应该是第一个点有特殊性,翻的时候可以只影响一个,下面是代码:

(附上几个自己想的样例:101 :2      11011  :2    1111 :2    00000 :0     010 :3     1001 :2      0110 :4      1010 :3      0101: 3     011110 :6)

#include<stdio.h>
#include<string.h>
int main()
{char n[100];int len,num[100],num1[100],i,j,flog,ans,ans1;while(~scanf("%s",n)){ans=0;ans1=0;flog=0;len=strlen(n);memset(num,0,sizeof(num));memset(num1,0,sizeof(num1));for(i=0;i<len;i++){num[i]=n[i]-'0';num1[i]=num[i];}for(j=0;j<2;j++){if(j==0){ans++;num[0]=!num[0];num[1]=!num[1];for(i=0;i<len;i++){  if(num[i]==1&&i!=len-1){ans++;num[i]=0;num[i+1]=!num[i+1];if(i+2<len)num[i+2]=!num[i+2];}}} else if(j==1){for(i=0;i<len;i++){   if(num1[i]==1&&i!=len-1){ans1++;num1[i]=0;num1[i+1]=!num1[i+1];if(i+2<len)num1[i+2]=!num1[i+2];//重复段不长,没必要写子函数了; }}}}if(num[len-1]==0&&num1[len-1]==0){if(ans<ans1)ans1=ans;printf("%d\n",ans1);}else if(num[len-1]==0){printf("%d\n",ans);}else if(num1[len-1]==0){printf("%d\n",ans1);}elseprintf("NO\n");}return 0;
}

HDU 2209 C - 翻纸牌游戏相关推荐

  1. HDU 2209 翻纸牌游戏(DFS)

    题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...

  2. HDU 2209 翻纸牌游戏 模拟

    Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦的是,每当你翻一张纸牌(由 ...

  3. 翻纸牌游戏 【HDU - 2209】【规律】

    题目链接 这道题竟是同时改变左右两个,一开始看成只改变其中一个,然后推了个状态,发现是偶数就行.奇数就NO,后来看到时就知道给WA了,并且还得重新推过. 那么,这道题又该如何求解?我们知道对于左右两端 ...

  4. 【HDOJ】2209 翻纸牌游戏

    状态压缩+双向广搜.注意控制时间t. /* 2209 */ #include <iostream> #include <string> #include <map> ...

  5. hdu-2209 翻纸牌游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=2209  题解:把所有的状态看成01二进制,状态压缩,比较简单的bfs+状态压缩 #include<cstd ...

  6. 基于C++实现MFC简单的纸牌小游戏,附纸牌游戏引擎源码!

    VC++ 纸牌戏框架源码,不是完整的游戏源代码,基于MFC,写的还不是太熟悉,唉,先凑合吧,偶会继续努力学习MFC的,这个框架也是做了好几天的东西,亏本奉献了.. 项目展示: 代码展示: 效果: VB ...

  7. 用计算机玩纸牌,《玩“纸牌”游戏》教学设计

    [教学目标] 知识目标:1.进一步认识窗口.对话框和菜单命令. 2.让学生掌握纸牌游戏的玩法,使学生从玩中学计算机知识. 3.使学生熟练掌握鼠标器的操作方法. 4.初步使用"帮助" ...

  8. 面向对象实验——solitaire纸牌游戏

    项目地址 https://github.com/ccclll777/Windows_Solitaire_game 如果有帮助可以点个star 实验内容 使用java/C++语言,利用面向对象技术,模拟 ...

  9. java中的纸牌游戏_JAVA课程设计纸牌游戏

    <JAVA课程设计纸牌游戏>由会员分享,可在线阅读,更多相关<JAVA课程设计纸牌游戏(16页珍藏版)>请在人人文库网上搜索. 1.一.问题分析和任务定义1.题目:纸牌游戏:编 ...

最新文章

  1. 实现在GET请求下调用WCF服务时传递对象(复合类型)参数
  2. 用标号跳出当前多重嵌套循环是否继续执行循环_4、在JAVA中如何跳出当前的多重嵌套循环?-Java面试题答案...
  3. 移动端接口:版本的兼容
  4. Leetcode51 n皇后 DFS+回溯(模板题)
  5. 内容提供器(Content-Provider)完整使用指南
  6. 实现一个在JNI中调用Java对象的工具类,从此只需一行代码
  7. rax+react hook 实现分页效果
  8. C++异常(exception)第一篇--综合讲解
  9. linux win10虚拟内存,高手解惑win10系统电脑虚拟内存不足的还原技巧
  10. python中的常量是什么意思_第14p,Python中的常量与注释。
  11. Ubuntu16.04下,Firefox每次打开新网页都是以新建Windows而不是Tab的解决方案:
  12. ugui unity3d 仪表盘_Unity3D---UGUI---UI创建以及Canvas设置
  13. 中国黑客常用六种工具及防御方法(转)
  14. Chrome终极全屏模式Kiosk
  15. 共享单车泡沫破灭,自行车产业链的每个环节都被波及
  16. 又有2名博士入选华为“天才少年”!学霸日常科研计划表曝光
  17. 若依源码分析(6)——部门管理
  18. CRUD的意思???
  19. JavaScript 教程「6」:数组
  20. 4.12 并发技术:sync包同步调度综合案例

热门文章

  1. 菜鸟炒美股(一) (转)
  2. MG90S舵机驱动原理和程序代码
  3. 项目管理:怎样做需求分析(一)
  4. 独立游戏制作人的罗生门
  5. 交互式SQL(Transact SQL,TSQL)
  6. vue如何实现在页面上画画_Vue使用Canvas绘制图片、矩形、线条、文字,下载图片...
  7. 设计模式 —— 简单工厂模式、工厂模式
  8. 六级单词--词根词缀篇
  9. 2018年中国500强排行榜
  10. 31 | SpringBoot安全之整合Spring Security