题解:UVA468 Key to Success

Life_Game

2024-11-17 22:39:26

Solution

0x01 题意

这道题纯水,意思就是出现频率最高的字母一一对应,然后替换就可以了。

但是有一个坑:最后一个字符串后只能输出一个空行,当时卡了我好久。

0x02 如何做

用两个桶存储每个字母对应的频率和是哪个字母。然后排序。

再用一个数组存储每个字母对应的字母即可。

代码如下:

#include <bits/stdc++.h>
using namespace std;

struct character{
    char id;int num;
}bot1[3300], bot2[3300];
char mapp[300];
string s, sp;
int T;

bool cmp(character a, character y){
    return a.num>y.num;
}

int main(){
    cin>>T; 
    while(T--){
    // 记得清空!!!
        memset(bot1, 0, sizeof bot1);
        memset(bot2, 0, sizeof bot2); 
        string tmp;
        cin>>s>>tmp;
        for(auto ed : s){
            bot1[ed].id=ed;
            bot1[ed].num++;
        }
        sort(bot1, bot1+200, cmp);
        for(auto ed : tmp){
            bot2[ed].id=ed;
            bot2[ed].num++;
        }
        sort(bot2, bot2+200, cmp);
        for(int i=0;i<=200;i++){
            if(bot1[i].num!=0){
                mapp[bot2[i].id]=bot1[i].id;
            }
        }
        for(auto ed : tmp){
            cout<<mapp[ed];
        } 
        cout<<'\n';//注意:每个字符串需要两行分割
        if(T) cout<<'\n'; //最后一个不用
    }
}