『题解』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;
}
posted @ 2023-03-11 21:11  Clyfort  阅读(16)  评论(0编辑  收藏  举报