随笔 - 216,  文章 - 0,  评论 - 17,  阅读 - 25463

比赛链接:

https://codeforces.com/contest/1688/problem/C

C. Manipulating History

题意:

给定 2 * n 个字符串,将它们重新排序,每次可以选择一个等于 s2i 的子串,将它变成 s2i+1,现在已知最后的字符串,求出最开始的字符(最开始只有一个字符)。

思路:

当某个字母从当前字符串删除时,会在字符串集合中出现一次。
当某个字母加入当前字符串时,也会在字符串集合中出现一次。
即除了最开始的字母,所有后面加入的字母都出现了偶数次。

代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
LL T, n;
void solve(){
	cin >> n;
	vector <int> cnt(30);
	for (int i = 1; i <= 2 * n + 1; i ++ ){
		string s;
		cin >> s;
		for (auto x : s)
			cnt[x - 'a'] ++ ;
	}
	for (char x = 'a'; x <= 'z'; x ++ )
		if (cnt[x - 'a'] & 1)
			cout << x << "\n";
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	cin >> T;
	while (T -- )
		solve();
	return 0;
}
posted on   Hamine  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示