codeforces 154A 贪心

贪心

题目自身限制每个字母最多出现在一个限制词语中,给出k个限制词语,将问题转化为k个子问题,对每个限制词语遍历给出的字符串,如限制词do,若出现连续的oddoood(连续的o和d),统计o和d出现的次数,消去较小的次数。

#include<cstdio>
#include<cstring>
using namespace std;
const int N=100005;
char fb[14][2];
char s[N];
int main() {
    int n;
    gets(s);
    scanf("%d
",&n);
    int len=strlen(s);
    for(int i=1;i<=n;i++) {
        scanf("%c%c",&fb[i][0],&fb[i][1]);
        getchar();
    }
    int cnt=0,cntt=0,res=0;
    for(int j=1;j<=n;j++) {
        cnt=0,cntt=0;
        for(int i=0;i<len;i++) {
            if(s[i]==fb[j][0] || s[i]==fb[j][1]) {
                if(s[i]==fb[j][0]) cnt++;
                else if(s[i]==fb[j][1]) cntt++;    
            }
            else {
                res+=min(cnt,cntt);
                cnt=cntt=0;
            }
        }
        if(s[len-1]==fb[j][0] || s[len-1]==fb[j][1]) res+=min(cnt,cntt);    
    }
    printf("%d
",res);
    return 0; 
} 
原文地址:https://www.cnblogs.com/LinesYao/p/5689556.html