xmu1303.田教主的卡片
题目链接:http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1303
题目描述:
1303.田教主的卡片
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submissions: 304 (122 users) Accepted: 129 (106 users)
[ My Solution ]
Total Submissions: 304 (122 users) Accepted: 129 (106 users)
[ My Solution ]
Description
由于大四课比较少,无聊的田教主开始研究起01串来了,说是要给积分赛出关于01串的题目。不过令人惊讶的是他居然拿出了n张自制的卡片,且在每张卡片的一面写上了数字0,另一面写上了数字1,并将这n张卡片放置在桌上排成一排。这样,借助这些卡片,田教主开始构思他的01串题目了。大家知道thinkpoet是很菜的菜鸟,得知这个消息后,作为菜鸟的thinkpoet自然想去膜拜田教主,向他请教关于某个01串的题目。当向thinkpoet讲解到一半的时候,田教主需要以这n张卡片作为示例来辅助讲解。但是首先他要做的是将所有这些卡片朝上的数字都弄成相同。田教主的一次操作可以将一段连续范围的卡片都翻转过来。thinkpoet想知道田教主最少需要几次操作,才能把这n张卡片朝上的数字都弄成相同。
Input
第一行为一个整数T(T<=30),表示输入数据组数。
对于每一组数据,第一行为一个整数n(n<=100),表示有n张卡片。接下来一行有一个长度为n的01串,表示这n张卡片的初始摆放情况。
对于每一组数据,第一行为一个整数n(n<=100),表示有n张卡片。接下来一行有一个长度为n的01串,表示这n张卡片的初始摆放情况。
Output
对于每组输入,每行输出田教主所需的最少操作次数。
Sample Input
2
5
00110
9
001100111
5
00110
9
001100111
Sample Output
1
2
2
Source
thinkpoet @ xmu
思路:大水题一道;首先枚举出全部变成1需要几次,然后枚举出全部变成0需要几次,再比较,选出小的,就是答案。
代码:
#include <stdio.h> #include <string.h> int main() { int i,j,m,n; char a[1000],b[1000]; int min,t; while(scanf("%d",&m)!=EOF) { while(m--) { scanf("%d",&n); scanf("%s",a); strcpy(b,a); t=0; for(i=0;i<n;i++) { if(a[i]=='0') { t++; for(;a[i]=='0'&&i<n;i++) a[i]='1'; i--; } } min=t; t=0; for(i=0;i<n;i++) { if(b[i]=='1') { t++; for(;b[i]=='1'&&i<n;i++) b[i]='0'; i--; } } if(t<min) min=t; printf("%d\n",min); } } return 0; }