zoukankan      html  css  js  c++  java
  • 【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("
    ");
    }
    
    
  • 相关阅读:
    谈谈程序员、技术主管和架构师
    PyPI教程
    python以下划线开头的变量和函数的作用
    csv和xlsx区别
    编码问题2 utf-8和Unicode的区别
    编码问题1
    洛谷 1404 平均数
    洛谷 1441 砝码秤重
    【模板】高斯消元法
    线段树练习题
  • 原文地址:https://www.cnblogs.com/bxd123/p/10500437.html
Copyright © 2011-2022 走看看