社区讨论
求助,有用回答者给二关
灌水区参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lzwb4b6w
- 此快照首次捕获于
- 2024/08/16 14:07 2 年前
- 此快照最后确认于
- 2024/08/17 10:13 2 年前
首先是题面
在遥远的过去,某国为了国防安全,设计了一套加密算法。这套加密算法会首先将 26 个英文字母按任意顺序顺时针围成一个环,然后要传输的文本的每个字母都用这个环上的它的下一个字母替换。例如,假设 26 个英文字母排成的环为:
qwertyuiopasdfghjklzxcvbnm,那么如果传输的文本为 manwhatcanisay,则加密后的文本为 qsmejsyvsmodsu。我们将这个环称为密钥。假设你是这个国家敌国的间谍,你截获了对方的一段加密文本(设为 ),但是你不知道加密的密钥。你想要知道:将 通过某种密钥还原之后能得到的字典序最小的密文可能是什么?
紧接着是样例
CPP3
qsmejsyvsmodsu
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxzy
输出
CPPabcdebfgbchibj
bcdefghijklmnopqrstuvwxyza
bcdefghijklmnopqrstuvwxyaz
我的代码
CPP#include<bits/stdc++.h>
#define fast register int
using namespace std;
const int N=1e4+100;
int t,x;
bool vis[N],f[N];
string s;
char a[N],qwq='a';
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
for (fast q=1;q<=t;q++){
cin>>s;
memset(vis,false,sizeof(vis));
memset(f,false,sizeof(f));
for (fast i=0;i<s.size();i++){
x=int(s[i]);
if (f[x]==false){
for (fast j=0;j<26;j++){
char ch=j+'a';
if (vis[j+1]==false&&ch!=s[i]){
a[x]=ch;
vis[j+1]=true;
f[x]=true;
break;
}
}
}
cout<<a[x];
}
// for (fast i=97;i<=122;i++){
// cout<<a[i];
// }
cout<<endl;
}
return 0;
}
我的输出
CPPabcdebfgbchibj
badcfehgjilknmporqtsvuxwzy
badcfehgjilknmporqtsvuxwyz
回复
共 5 条回复,欢迎继续交流。
正在加载回复...