蓝桥杯 翻硬币 (规律)
2016-01-11 21:14
211 查看
历届试题 翻硬币
时间限制:1.0s 内存限制:256.0MB
问题描述
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
输出格式
一个整数,表示最小操作步数。
样例输入1
**********
o****o****
样例输出1
5
样例输入2
*o**o***o***
*o***o**o***
样例输出2
1
时间限制:1.0s 内存限制:256.0MB
问题描述
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
输出格式
一个整数,表示最小操作步数。
样例输入1
**********
o****o****
样例输出1
5
样例输入2
*o**o***o***
*o***o**o***
样例输出2
1
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char a[1010]; char b[1010]; int vis[1010]; int main() { int i,j,l; while(scanf("%s%s",a,b)!=EOF) { l=strlen(a); for(i=0;i<l;i++) { if(a[i]==b[i]) vis[i]=0; else vis[i]=1; } int ans=0,flag=-1; for(i=0;i<l;i++) { if(vis[i]) { if(flag==-1) flag=i; else { ans+=i-flag; flag=-1; } } } printf("%d\n",ans); } return 0; }
相关文章推荐
- hydra 爆破1433端口 sql service 服务
- ZOJ1654 Place the Robots(二分图最大匹配)
- Spring 4 MVC 单元测试例子
- 野生程序猿进化开始
- gem5: classic缓存模型下多bank实现 - mem: model data array bank in classic cache
- cmd命令 sc
- Exercise1_1_24
- 深入理解KMP算法核心思想
- struts +bootstrap+freemarker实现的后台黑名单管理。
- 用bat批处理脚本登录mysql
- C#数据流
- VS2013自定义快捷键
- iOS 开发 如何获得用户当前位置(通过经纬度获得城市、省份等信息)
- 模板(三)
- ActiveMQ In Action
- 《ActiveMQ In Action》Chapter 1 Introduction to Apache ActiveMQ
- [转]C++中关于new和delete的使用
- Spring MVC + Mybatis + Shiro
- poj1739Tony's Tour【插头DP】楼教主男人八题之一
- Java异常机制