NOIp模拟 同心锁

来源:互联网 发布:mac照片拷到移动硬盘 编辑:程序博客网 时间:2024/04/29 19:28
〖题目描述〗
纤云弄巧,飞星传恨,银汉迢迢暗度。金风玉露一相逢,便胜却人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路。两情若是久长时,又岂在朝朝暮暮!
——秦观《鹊桥仙》
夜未央。带着细腻连绵的眼光遥望牛郎织女千年的爱情,平淡、精致且长久
的幸福感顿时氤氲在心。或许幸福就是这样,不求朝暮合,但求永同心。据说同
心锁是恋人们定情的一种信物,上面刻着两人的名字,它见证着天长地久的爱情,
诉说着爱情的坎坷与甜蜜。
据说在一座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


这题目太有逼格了!!

/*复习了c++字符串的操作。*/#include<cmath>#include<cstdio>#include<vector>#include<string>#include<cstring>#include<iostream>#include<algorithm>#define N 2016using namespace std;int m,n,p;string st;string res;void change(string s){    int l=s.size();    for (int i=0;i<l;i++)    {        if (s[i]>='a'&&s[i]<='z') s[i]-=32;        else if (s[i]>='A'&&s[i]<='Z') s[i]+=32;    }    res=s+"Immorta1";}void del(string s,string b){    int p=0,lens=s.size(),lenb=b.size();    string tmp;    while(p<lens)    {        if (s.substr(p,lenb)==b) p+=lenb;        else tmp+=s[p],p++;    }    p=0;    while(p<tmp.size())    {        if (tmp.substr(p,4)=="1013") res+="hh4742",p+=4;        else res+=tmp[p],p++;    }}void push(string a,string b){    int k=abs(n-m)-1;    res=a.substr(0,k);    res+=b;    res+=a.substr(k,a.size()-k);}void work(){    string a=st.substr(0,m-1);    string b=st.substr(m-1,st.size()-m+1);    switch(n)    {        case 1:change(st);               break;        case 2:del(st,b);               break;        case 3:push(a,b);               break;    }    for (int i=0;i<res.size();i++)        for (int j=1;j<=p+1;j++) printf("%c",res[i]);    printf("\n");}int main(){    freopen("lock.in","r",stdin);    freopen("lock.out","w",stdout);    cin >> st;    cin >> m >> n>>p;    work();    return 0;}


0 0
原创粉丝点击