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 ]
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张卡片的初始摆放情况。

 

Output
对于每组输入,每行输出田教主所需的最少操作次数。

 

Sample Input
2
5
00110
9
001100111

 

Sample Output
1
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;   
} 

 

 

 

posted @ 2012-07-19 22:55  hnust_tongguang  阅读(148)  评论(0编辑  收藏  举报