题目
加密方式是每次取原串的中位数位置(如果有两个就取左边那个)
然后取出这个字母来,缀在新串后面
现在给你一个已经加密好的串,
求原串,即将串解密
思路来源
钱神
题解
模拟加密过程,
每次取中位数位置的那个实际位置
将该位置赋对应的加密串的位置的字母
不断将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;
}
本文介绍了一种基于中位数位置的字符串加密方法及其解密过程。通过模拟加密流程,每次选取加密串中位数位置的字符,将其还原至原串对应位置,逐步解密整个字符串。文章详细阐述了使用vector实现list功能,展现了STL的强大能力。
1552

被折叠的 条评论
为什么被折叠?



