2013-01-25 19:46:31Morris
[ZJ][字串處理] d477. 古韵之同心锁
內容 :
纤云弄巧,飞星传恨,银汉迢迢暗度。金风玉露一相逢,便胜却人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路。两情若是久长时,又岂在朝朝暮暮!
——秦观《鹊桥仙》
夜未央。带着细腻连绵的眼光遥望牛郎织女千年的爱情,平淡、精致且长久的幸福感顿时氤氲在心。或许幸福就是这样,不求朝暮合,但求永同心。据说同心锁是恋人们定情的一种信物,上面刻着两人的名字,它见证着天长地久的爱情,诉说着爱情的坎坷与甜蜜。
据说在一座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)。
第二行有3个数:m(1<m<s的长度)、n(1、2或3)、p(0<=p<100)。
輸出說明
:
输出一个字符串,为经过多次变化后最终得到的s。
範例輸入 :
【样例输入1】 MEIYOUwsshujuBYhh4742 14 1 1 【样例输入2】 oiBYhh4742MEIYOU1013hh4742wsshujuBYhh4742 34 2 0 【样例输入3】 ipkepk 5 3 3
範例輸出 :
【样例输出1】 mmeeiiyyoouuWWSSSSHHUUJJUUbbyyHHHH44774422IImmmmoorrttaa11 【样例输出2】 oiMEIYOUhh4742hh4742wsshuju 【样例输出3】 iiiippppkkkkppppkkkkeeee
提示
:
出處
:
vijos
(管理:vijos_car)
/**********************************************************************************/
/* Problem: d477 "古韵之同心锁" from vijos */
/* Language: CPP (3279 Bytes) */
/* Result: AC(4ms, 260KB) judge by this@ZeroJudge */
/* Author: morris1028 at 2013-01-25 19:45:00 */
/**********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char s[10005], o1[] = "Immorta1";
int m, n, p;
int i, j, k;
while(scanf("%s", s) == 1) {
scanf("%d %d %d", &m, &n, &p);
char a[10005], b[10005];
int len = strlen(s);
for(i = 0; i < m-1 && i < len; i++)
a[i] = s[i];
a[i] = '\0';
for(i = m-1, j = 0; i < len; i++, j++)
b[j] = s[i];
b[j] = '\0';
if(n == 1) {
for(i = 0; s[i]; i++) {
if(s[i] >= 'A' && s[i] <= 'Z')
s[i] = s[i]-'A'+'a';
else if(s[i] >= 'a' && s[i] <= 'z')
s[i] = s[i]-'a'+'A';
for(j = 0; j <= p; j++)
putchar(s[i]);
}
for(i = 0; o1[i]; i++) {
for(j = 0; j <= p; j++)
putchar(o1[i]);
}
//puts("");
} else if(n == 2) {
int idx = 0;
for(i = 0; a[i]; i++) {
for(j = i, k = 0; b[k]; k++, j++)
if(a[j] != b[k])
break;
if(b[k] == '\0') {
i = j-1;
continue;
}
a[idx++] = a[i];
}
a[idx] = '\0';
char out[5000];
idx = 0;
for(i = 0; a[i]; i++) {
if(a[i] == '1' && a[i+1] == '0' && a[i+2] == '1' && a[i+3] == '3') {
out[idx++] = 'h';
out[idx++] = 'h';
out[idx++] = '4';
out[idx++] = '7';
out[idx++] = '4';
out[idx++] = '2';
i += 3;
continue;
}
out[idx++] = a[i];
}
out[idx] = '\0';
for(i = 0; out[i]; i++)
for(j = 0; j <= p; j++)
putchar(out[i]);
//puts("");
} else {
char out[10005];
int idx = 0;
for(i = 0; i < abs(n-m)-1; i++)
out[idx++] = a[i];
for(i = 0; b[i]; i++)
out[idx++] = b[i];
for(i = abs(n-m)-1; a[i]; i++)
out[idx++] = a[i];
for(i = 0; out[i]; i++)
for(j = 0; j <= p; j++)
putchar(out[i]);
if(m == 1) {
for(i = 0; b[i]; i++)
for(j = 0; j <= p; j++)
putchar(b[i]);
puts("");
}
puts("");
}
}
return 0;
}