『题解』Codeforces 1251A Broken Keyboard
Solution
由题目可知,\(t \le 100, |s| \le 500\),看这数据范围,很容易想到直接模拟。
怎样模拟呢,举一个例子:
a b b c d d
首先从第一个字符开始比较,这时 \(i = 0\),发现 \(s_i \neq s_{i+1}\),则把 \(s_i\) 计入答案。
此时 \(i = 1\),发现 \(s_i = s_{i +1}\),跳过。跳过需要跳过两轮循环,即再循环的基础上再 \(i = i + 1\)。
跳过后 \(i = 3\),发现 \(s_i \neq s_{i+1}\),则把 \(s_i\) 计入答案。
此时 \(i = 4\),发现 \(s_i = s_{i + 1}\),\(i = i + 1\)。
跳过后,\(i = 6\),则退出循环。此时答案为 ac
。
注意,题目要求按照字母顺序输出,所以方便起见,可以用 set
维护答案。
Code
#include <bits/stdc++.h>
using namespace std;
set <char> ans;
void solve()
{
ans.clear();
string s;
cin >> s;
for (int i = 0; i < s.size(); i ++)
{
if (s[i] != s[i + 1])
ans.insert(s[i]);
else
i ++;
}
for (auto c : ans)
cout << c;
cout << endl;
}
int main()
{
int tt = 1;
cin >> tt;
while (tt --)
solve();
return 0;
}