A古韵之同心锁【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

来源:
来自 <http://www.dingbacode.com/contest/19/problem/A>

题解:
用string处理

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <bits/stdc++.h>
using namespace std;

int main()
{
int m,n,p;
string s;

cin>>s;
cin>>m>>n>>p;
if(n==1)
{
for(int i=0; i<s.size(); i++)
if(s[i]>='a'&&s[i]<='z') s[i]-=32;
else if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
s+="Immorta1";
for(int j=0; j<s.size(); j++)
for(int i=0; i<=p; i++)
cout<<s[j];
cout<<endl;
}
else if(n==2)
{

string b=s.substr(m-1);
string s1;
int tou=0;
int x;

while(1)
{
x=s.find(b,tou);
if(x==-1) break;
s1+=s.substr(tou,x-tou);
tou=x+b.size();

}
while(1)
{

x=s1.find("1013");
if(x==-1) break;

s1=s1.substr(0,x)+"hh4742"+s1.substr(x+4);

}

for(int j=0; j<s1.size(); j++)
for(int i=0; i<=p; i++)
cout<<s1[j];
cout<<endl;
}
else if(n==3)
{
string s1;
s1=s.substr(0,abs(n-m)-1)+s.substr(m-1)+s.substr(abs(n-m)-1,m-abs(n-m));
for(int j=0; j<s1.size(); j++)
for(int i=0; i<=p; i++)
cout<<s1[j];
cout<<endl;
}
return 0;
}