#include<bits/stdc++.h>
using namespace std;
int s,t,w;
map<char,int> mp;
char eng[27]={'#','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string st,s1;
bool flag=0;
int main(){
scanf("%d%d%d",&s,&t,&w);
cin>>st;
st[w]=s1[w]='@';
for(int i=1;i<=26;i++) mp[eng[i]]=i;
mp['@']=100;
for(int sb=1;sb<=5;sb++){
flag=0;
for(int i=w-1;i>=0;i--){
if(st[i]==eng[t])continue;
for(int j=mp[st[i]]+1;j<=t;j++){
if(j<mp[st[i+1]]&&j>mp[st[i-1]]){
s1[i]=eng[j];
for(int k=i+1;k<w;k++){
s1[k]=eng[mp[s1[k-1]]+1];
}
for(int k=i-1;k>=0;k--){
s1[k]=st[k];
}
for(int i=0;i<w;i++){
if(!(s1[i]>=eng[s]&&s1[i]<=eng[t])) return 0;
}
for(int i=0;i<w;i++) cout<<s1[i];
cout<<endl;
for(int i=0;i<w;i++) st[i]=s1[i];
s1.erase(0);
flag=1;
break;
}
}
if(flag) break;
}
}
}
以上这段代码在输入
的时候第一个jam数的输出是
但以下两段代码对此数据的输出是
(后面那个是个神奇的符,显示不出来) 两段代码:
#include<bits/stdc++.h>
using namespace std;
int s,t,w;
map<char,int> mp;
char eng[27]={'#','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string st,s1;
bool flag=0;
int main(){
scanf("%d%d%d",&s,&t,&w);
cin>>st;
st[w]=s1[w]='@';
for(int i=1;i<=26;i++) mp[eng[i]]=i;
mp['@']=100;
for(int sb=1;sb<=5;sb++){
flag=0;
for(int i=w-1;i>=0;i--){
if(st[i]==eng[t])continue;
for(int j=mp[st[i]]+1;j<=t;j++){
if(j<mp[st[i+1]]&&j>mp[st[i-1]]){
s1[i]=eng[j];
for(int k=i+1;k<w;k++){
s1[k]=eng[mp[s1[k-1]]+1];
}
for(int k=i-1;k>=0;k--){
s1[k]=st[k];
}
flag=1;
break;
}
}
if(flag){
for(int i=0;i<w;i++) cout<<s1[i];
cout<<endl;
break;
}
}
for(int i=0;i<w;i++) st[i]=s1[i];
s1.erase(0);
}
}
以及:
#include<bits/stdc++.h>
using namespace std;
int s,t,w;
map<char,int> mp;
char eng[27]={'#','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string st,s1;
bool flag=0;
int main(){
scanf("%d%d%d",&s,&t,&w);
cin>>st;
st[w]=s1[w]='@';
for(int i=1;i<=26;i++) mp[eng[i]]=i;
mp['@']=100;
for(int sb=1;sb<=5;sb++){
flag=0;
for(int i=w-1;i>=0;i--){
if(st[i]==eng[t])continue;
for(int j=mp[st[i]]+1;j<=t;j++){
if(j<mp[st[i+1]]&&j>mp[st[i-1]]){
s1[i]=eng[j];
for(int k=i+1;k<w;k++){
s1[k]=eng[mp[s1[k-1]]+1];
}
for(int k=i-1;k>=0;k--){
s1[k]=st[k];
}
flag=1;
break;
}
}
if(flag) break;
}
for(int i=0;i<w;i++) cout<<s1[i];
cout<<endl;
for(int i=0;i<w;i++) st[i]=s1[i];
s1.erase(0);
}
}
请问这是为什么