Cipher Shifer
题目描述
There is a string $ a $ (unknown to you), consisting of lowercase Latin letters, encrypted according to the following rule into string $ s $ :
- after each character of string $ a $ , an arbitrary (possibly zero) number of any lowercase Latin letters, different from the character itself, is added;
- after each such addition, the character that we supplemented is added.
You are given string $ s $ , and you need to output the initial string $ a $ . In other words, you need to decrypt string $ s $ .
Note that each string encrypted in this way is decrypted uniquely.
输入格式
The first line of the input contains a single integer $ t $ ( $ 1 \le t \le 1000 $ ) — the number of test cases.
The descriptions of the test cases follow.
The first line of each test case contains a single integer $ n $ ( $ 2 \le n \le 100 $ ) — the length of the encrypted message.
The second line of each test case contains a string $ s $ of length $ n $ — the encrypted message obtained from some string $ a $ .
输出格式
For each test case, output the decrypted message $ a $ on a separate line.
题面翻译
对一个字符串 a a a 进行加密后得到一个新字符串 s s s。
加密规则如下:
- 在字符串 a a a 的每个字符之后,添加任意(可能为零)数量的小写字母,与字符本身不同。
- 在每次这样的添加之后,我们将被补充的字符添加在已添加的字符后。
给出已加密字符串 s s s,求出加密之前的字符串。
样例输入 #1
3
8
abacabac
5
qzxcq
20
ccooddeeffoorrcceess
样例输出 #1
ac
q
codeforces
提示
In the first encrypted message, the letter $ a $ is encrypted as $ aba $ , and the letter $ c $ is encrypted as $ cabac $ .
In the second encrypted message, only one letter $ q $ is encrypted as $ qzxcq $ .
In the third encrypted message, zero characters are added to each letter.
分析
这道题过于简单,以至于洛谷不允许写题解。但是还是有一点误区的,是输出加密的那个字符,还是输出后补的同一个字符,如果输出加密的那个字符,样例能过,但是无法AC,如果输出后补的那个字符,是都可以通过的。
比如这个加密字符串 aaaaa,如果输出加密的那个字符,输出的aaa,输出的第三个a是不满足条件的,因为没有给它加密,如果输出后补的那个字符,就很好的避免了这个问题。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int t,n;
cin>>t;
while(t--)
{
cin>>n;
cin>>s;
char a=s[0];
//cout<<a;//
for(int i=1;i<n;i++)
{
if(s[i]==a)
{
cout<<a;
a=s[++i];
}
}
cout<<endl;
}
return 0;
}