题目
加密方式是每次取原串的中位数位置(如果有两个就取左边那个)
然后取出这个字母来,缀在新串后面
现在给你一个已经加密好的串,
求原串,即将串解密
思路来源
钱神
题解
模拟加密过程,
每次取中位数位置的那个实际位置
将该位置赋对应的加密串的位置的字母
不断将n缩短,直至全部加密完
心得
算是用vector实现了一下list叭
vector这个东西无所不能
能二分,能当set,能当list
要好好用stl啊
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=2e3+10;
char s[maxn],ans[maxn];
int n,cnt;
vector<int>q;
int main()
{
scanf("%d",&n);
scanf("%s",s);
for(int i=1;i<=n;++i)
q.push_back(i);
n--;
while(~n)
{
ans[q[n/2]-1]=s[cnt++];
q.erase(q.begin()+n/2);
n--;
}
printf("%s",ans);
return 0;
}