(事業部の定格。2)教育Codeforcesラウンド75 A.壊れたキーボード

リンク:

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;
}

おすすめ

転載: www.cnblogs.com/YDDDD/p/11779029.html