【noip模拟赛1】古韵之同心锁

 

据说在一座OI桥上,同心锁上显示的文字有着它奇异的呈现方式,需要你把它稍做改变才可解密。每个同心锁上都有3个数据。第一个数据是一个字符串s。第二个数据m表示把s串从m处分为两段,s[1]至s[m-1]为a串,s[m]至最后为b串。第三个数据n表示你需要做改变的方式。第4个数据表示把n处理后的s串每个字母变重复次数p,不用重复则为0。

n=1时,把s串中所有大写字母改成小写字母,把所有小写字母改成大写字母,然后在后面加上‘Immorta1’;

n=2时,从s串中删除所有出现的和b一样的子串,然后把所有出现的‘1013’改成‘hh4742’。

n=3时,在a串部分的|n-m|-1和|n-m|之间插入b串,并删除b串部分。

输入

 

第一行有一个字符串s(长度不超过1993);

第二行有3个数:m(1<m<s的长度)、n(1、2或3)、p(0<=p<100)。

输出

 

输出一个字符串,为经过多次变化后最终得到的s。

输入样例 1 

MEIYOUwsshujuBYhh4742
14 1 1

输出样例 1

mmeeiiyyoouuWWSSSSHHUUJJUUbbyyHHHH44774422IImmmmoorrttaa11

输入样例 2 

oiBYhh4742MEIYOU1013hh4742wsshujuBYhh4742
34 2 0

输出样例 2

oiMEIYOUhh4742hh4742wsshuju

输入样例 3 

ipkepk
5 3 3

输出样例 3

iiiippppkkkkppppkkkkeeee




非常好的字符串处理题 比赛的时候用char数组做耗费了好久时间 还没做出来。

注意活用 s.substr(i,j) !!! //为string a 的第i个字符开始的j个字符

体会到了string的强大
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
//input
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m);
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s)
#define LL long long
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
//////////////////////////////////
#define N 2000+5
string s,ans;
int main()
{
    int m,n,cnt;
    cin>>s;
    cin>>m>>n>>cnt;
   string a=s.substr(0,m-1);
   string b=s.substr(m-1,s.size()-m+1);
    if(n==1)
    {
       REP(i,s.size())
         {
             if(islower(s[i]))s[i]-=32;
             else if(isupper(s[i]))s[i]+=32;
         }
        ans=s+"Immorta1";
    }
    else if(n==2)
    {
        int lens=s.size();
        int lenb=b.size();
        int i=0;
        string temp;
        while(i<lens)
        {
            if(s.substr(i,lenb)==b)i+=lenb;
            else temp+=s[i++];
        }
        i=0;
        while(i<temp.size())
        {
            if(temp.substr(i,4)=="1013")ans+="hh4742",i+=4;
            else  ans+=temp[i++];
        }
    }
    else
    {
        int k=abs(n-m)-1;
        string l=a.substr(0,k);
        string r=a.substr(k,a.size()-k);
        ans=l+b+r;
    }
    
    REP(i,ans.size())
     for(int j=0;j<=cnt;j++)
        cout<<ans[i];
     printf("\n");
}













猜你喜欢

转载自www.cnblogs.com/bxd123/p/10500437.html