24h購物| | PChome| 登入
2013-01-25 19:46:31| 人氣679| 回應0 | 上一篇 | 下一篇

[ZJ][字串處理] d477. 古韵之同心锁

推薦 0 收藏 0 轉貼0 訂閱站台

內容 :

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

範例輸入 :help

【样例输入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;
}

台長: Morris
人氣(679) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:[ZJ][高精度DP] d870. NOIP2000 3.乘积最大
此分類上一篇:[ZJ][DP] d841. NOIP2003 3.加分二叉树

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文