リンク:
https://codeforces.com/contest/1251/problem/A
質問の意味:
最近のpolycarpは、彼のキーボードのボタンの一部が故障していることに気づきました。簡単にするために、我々はのpolycarpのキーボードは26個のキー(ラテン語のアルファベットの各文字に1つ)が含まれていることを前提としています。各ボタンは作業罰金や誤動作のいずれかです。
交換する必要のあるボタンを確認するには、のpolycarpは、順番にいくつかのボタンを押すと、文字列sが画面上に現れました。polycarpは、文字cでボタンを押すと、次のいずれかのイベントが起こりました。
ボタンが正常に働いていた場合は、文字cはのpolycarpが入力された文字列の最後に現れました。
ボタンが故障した場合には、2つの文字cは、文字列の最後に登場しました。
例えば、文字のAとCに対応するボタンが正しく機能していると、bに対応するボタンが故障していると仮定します。→のABB→アバ→abbac→abbaca→abbacabb→abbacabba:のpolycarpは順にA、B、C、A、B、次のように彼は変更を入力している、その文字列を、ボタンを押した場合。
あなたはのpolycarpは、いくつかのボタンを押した後、画面上に現れた文字列sを与えられています。(これらのボタンのいずれかが故障した場合には、この文字列が画面に表示されませんでした)確実に正しく動作されているボタンを決定するためのpolycarpを助けます。
あなたはボタンをするときのpolycarpタイプ文字列を誤動作起動しないと仮定してよい:各ボタンには、プロセス全体を通して正しく動作する、またはプロセス全体を通して、誤動作のいずれか。
アイデア:
列挙長、限り条件で、連続奇数文字があるとして。
コード:
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
string s;
int t;
cin >> t;
while(t--)
{
cin >> s;
set<char> res;
for (int i = 0, j;i < (int)s.length();i=j+1)
{
j = i;
for (;j < (int)s.length();j++)
{
if (s[j] != s[i])
{
j--;
break;
}
}
j = min((int)s.length()-1, j);
if ((j-i+1)%2)
res.insert(s[i]);
}
for (auto v: res)
cout << v;
cout << endl;
}
return 0;
}