【贪心】codeforces 825D Suitable Replacement

来源:互联网 发布:java怎么调用外部接口 编辑:程序博客网 时间:2024/05/23 22:03

Link:http://codeforces.com/problemset/problem/825/D

#include <bits/stdc++.h>using namespace std;/*codeforces 825D题意:给两个字符串,第一个字符串带有'?',可以变成任何一个字符,并且第一个字符串的字符位置可以任意交换,问第一个字符是怎么样的才能使,第二个字符在第一个字符中存在(非交叉)次数最多。题解:贪心,反正可以任意交换,而且字符非交叉,我一个一个组第二个字符串,需要什么字符,如果第一个字符串里有,拿过来,没有用'?'去代替即可。记录'?'代表的字符。*/const int Maxn = 1e6+6;char s[Maxn],p[Maxn];int mp[27];char res[Maxn];int main(){    scanf("%s%s",s,p);    int len = strlen(s);    int num = 0;    for(int i = 0; i < 26; i++)        mp[i] = 0;    for(int i = 0; i < len; i++){        if(s[i] == '?') num++;        else    mp[s[i]-'a']++;    }    int lenp = strlen(p);    int k = 0;    while(1){        int flag = 0;        for(int i = 0; i < lenp; i++){            if(mp[p[i]-'a'] > 0)                mp[p[i]-'a'] --;            else{                if(num > 0){                    res[k++] = p[i];                    num--;                }                else{                    flag = 1;                    break;                }            }        }        if(flag)    break;    }    k = 0;    for(int i = 0; i < len; i++){        if(s[i] == '?')            printf("%c",res[k++]);        else            printf("%c",s[i]);    }    puts("");    return 0;}


原创粉丝点击