洛谷 P1703 那个什么密码2

题目背景

https://www.luogu.org/problem/show?pid=1079

题目描述

与原题一模一样、具体不同请见输入格式

输入输出格式

输入格式:

 

第一行输入密钥

第二行输入明文

第三行输入一个正整数M,代表操作个数.

每个操作将[a,b]的字符全部倒转,比如abc倒转为cba.

接下来M行,每行输入两个正整数a,b。

 

输出格式:

 

输出一行,输出密文。

 

输入输出样例

输入样例#1: 复制
CompleteVictory
Wherethereisawillthereisaway
0
输出样例#1: 复制
Yvqgpxaimmklongnzfwpvxmniytm

说明

由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;
}

 

 

posted @ 2017-12-13 20:57  一蓑烟雨任生平  阅读(270)  评论(0编辑  收藏  举报