专栏文章

题解: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 条评论,欢迎与作者交流。

正在加载评论...