专栏文章
题解:UVA468 Key to Success
UVA468题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minbmqp7
- 此快照首次捕获于
- 2025/12/01 23:45 3 个月前
- 此快照最后确认于
- 2025/12/01 23:45 3 个月前
思路
这道题可以记录下每个字符出现的频率,并按照频率进行排序,再用
map 存储每个字母对应的字母,最后将第二个字符串转换后输出即可。注意:这道题细节很多,包括有大小写英文字母,如果最后一个字符串后只输出一个空行,否则输出两个空行等。
代码
CPP#include <bits/stdc++.h>
using namespace std;
struct node{
char letter;
int pl;
};
node numa[60], numb[60];
bool cmp(node x, node y){
return x.pl > y.pl;
}
int main(){
int t;
cin >> t;
while(t--){
memset(numa, 0, sizeof(numa));
memset(numb, 0, sizeof(numb));
string a, b;
cin >> a >> b;
for(int i = 1; i <= 52; i++){
if(i <= 26){
numa[i].letter = char('a' + i - 1);
numb[i].letter = char('a' + i - 1);
}
else{
numa[i].letter = char('A' + (i - 26) - 1);
numb[i].letter = char('A' + (i - 26) - 1);
}
}
for(int i = 0; i < a.length(); i++){
if(a[i] >= 'a' && a[i] <= 'z'){
numa[int(a[i] - 'a' + 1)].pl++;
}
else{
numa[int(a[i] - 'A' + 27)].pl++;
}
}
for(int i = 0; i < b.length(); i++){
if(b[i] >= 'a' && b[i] <= 'z'){
numb[int(b[i] - 'a' + 1)].pl++;
}
else{
numb[int(b[i] - 'A' + 27)].pl++;
}
}
sort(numa + 1, numa + 53, cmp);
sort(numb + 1, numb + 53, cmp);
map<char, char> turn;
for(int i = 1; i <= 52; i++){
if(numa[i].pl != 0 && numb[i].pl != 0){
turn[numb[i].letter] = numa[i].letter;
}
}
for(int i = 0; i < b.length(); i++){
cout << turn[b[i]];
}
cout << endl;
if(t != 0){
cout << endl;
}
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...