cf 529div3 A Repeating Cipher

Polycarp loves ciphers. He has invented his own cipher called repeating.

Repeating cipher is used for strings. To encrypt the string s=s1s2…sms=s1s2…sm (1≤m≤101≤m≤10), Polycarp uses the following algorithm:

  • he writes down s1s1 ones,
  • he writes down s2s2 twice,
  • he writes down s3s3 three times,
  • ...
  • he writes down smsm mm times.

For example, if ss="bab" the process is: "b" →→ "baa" →→ "baabbb". So the encrypted ss="bab" is "baabbb".

Given string tt — the result of encryption of some string ss. Your task is to decrypt it, i. e. find the string ss.

Input

The first line contains integer nn (1≤n≤551≤n≤55) — the length of the encrypted string. The second line of the input contains tt — the result of encryption of some string ss. It contains only lowercase Latin letters. The length of tt is exactly nn.

It is guaranteed that the answer to the test exists.

Output

Print such string ss that after encryption it equals tt.

题意大致就是给你一个字符串,这个字符串是被加密后的,让你求源字符串,加密的规则是原字符串第一个字符写一遍,第二个字符写两边,第三个字符写三遍,依次类推。

思路:就是用一个数组维护一个等差数列的前n项和,然后根据这个前n项和去在加密字符串里找,到原字符串

代码

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int num[60] = { 0, };
void cal()
{
		int cnt = 2;
		for (int i = 1; i <= 55; i++)
				num[i] = num[i - 1] + cnt++;

}

int main()
{
		cal();
		int n;
		scanf("%d", &n);
		num[n + 1] = 100;
		string s;
		cin >> s;
		int i = 0;
		int p = 1;
		while (i <= n)
		{
				printf("%c", s[i]);
				i =num[p++];
		}
		printf("\n");
		//system("pause");
		return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值