CF1840A 加密字符串

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;	
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值