题目背景
https://www.luogu.org/problem/show?pid=1079
题目描述
与原题一模一样、具体不同请见输入格式
输入输出格式
输入格式:
第一行输入密钥
第二行输入明文
第三行输入一个正整数M,代表操作个数.
每个操作将[a,b]的字符全部倒转,比如abc倒转为cba.
接下来M行,每行输入两个正整数a,b。
输出格式:
输出一行,输出密文。
输入输出样例
说明
由zxy大神原创、本人在洛谷上传。
思路:模拟。
吐槽:出题人的语文绝对不及格!!!!!(╯‵□′)╯︵┻━┻ 题目描述一点都不清楚。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; string s,k; int n,miyao[5010]; int main(){ cin>>k>>s; int len=k.length(); for(int i=0;i<len;i++) for(int j=i;j<5010;j+=len){ if(k[i]>=‘A‘&&k[i]<=‘Z‘) miyao[j]=(int)(k[i]-‘A‘); else miyao[j]=(int)(k[i]-‘a‘); } len=s.length(); for(int i=0;i<len;i++){ if(s[i]>=‘A‘&&s[i]<=‘Z‘){ if(s[i]+miyao[i]>‘Z‘) s[i]=s[i]+miyao[i]-26; else s[i]=s[i]+miyao[i]; } else{ if(s[i]+miyao[i]>‘z‘) s[i]=s[i]+miyao[i]-26; else s[i]=s[i]+miyao[i]; } } scanf("%d",&n); while(n--){ int a,b; scanf("%d%d",&a,&b); string t1=s.substr(0,a-1); string t2=s.substr(a-1,b-a+1); string t3=s.substr(b,s.length()-b); reverse(t2.begin(),t2.end()); s=t1+t2+t3; } cout<<s<<endl; }