hdu_3819 A and B Problem (字符串)

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


分析:

      由于最终要将两种字符分开,所以一开始,统计其中任一字符的总个数,也即最终会被放在一起的该字符的个数,suma;

      然后,以此长度遍历字符串,找到所有子串中具有此字符最多的,而另外一种字符的个数也即需要交换的次数;

      另者,需要注意其循环性。处理方法是从第i个字符(从该字符开始到最后一个字符的个数<suma,也即需要从前面取字符)开始到最后一个字符


代码:

#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
using namespace std;
#define M 100001

int ans[M];

int main()
{
    //freopen("in.txt","r",stdin);
    int t,i;
    string s;
    scanf("%d",&t);
    for(int ccnt=1;ccnt<=t;ccnt++){
        cin>>s;
        int len=s.length();
        int cnt=0;
        for(i=0;i<len;i++){
           if(s[i]==‘A‘)  cnt++;
           ans[i]=cnt;
        }

        int suma=ans[len-1];
        int cnta=0,tmpa;
        for(i=0;i+suma<len;i++){
            tmpa= ans[i+suma] - ans[i];
            if(tmpa>cnta) cnta=tmpa;
        }
        for(;i<len;i++){
            tmpa=ans[len-1]-ans[i] + ans[suma-(len-i)];
            if(tmpa>cnta) cnta=tmpa;
        }

        printf("Case %d: %d\n",ccnt,suma-cnta);
    }
    return 0;
}


hdu_3819 A and B Problem (字符串)

上一篇:Codeforces Round #223 (Div. 2)


下一篇:Git创建与管理远程分支