zoukankan      html  css  js  c++  java
  • 1830 、 1789 双倍经验 : [AHOI2008]Y型项链

    1789: [Ahoi2008]Necklace Y型项链

    Description

    欢乐岛上众多新奇的游乐项目让小可可他们玩的非常开心。现在他们正在玩比赛串项链的游戏,谁串的最快就能得到优厚的奖品。这可不是普通的项链,而是一种Y型项链,项链的最中间有一颗大珍珠作为结合点,从大珍珠上连出来3条由各种宝石串起来的链子。比赛的规则是这样的:每次可以从三条链子中某一条的一端取下来一个宝石,或者安上去一个宝石,称为一次操作,经过若干次操作,最终使得三条链子完全相同。想要赢得比赛,那么只能使用尽量少的操作次数。假设每种宝石都有无数多个以供使用,且链子足够长。你能帮助小可可赢得比赛吗? 注:由于对Y型项链的宝石数没有特殊的要求,所以即使你把所有宝石都取下来,也是一个可以接受的方案(三根没有串宝石的绳子也是完全一样的).

    Input

    一共有3行,表示Y型项链的三条链子,每行开始有一个数字N,表示初始时这条链子上串有N个宝石(N<=50),随后是一个空格,然后是N个'A'和'Z'之间的字符,表示这个链子上的宝石,每个字母表示一种不同的宝石,这个字符串最左边的字符表示的是离大珍珠最近的那个宝石,而最右边的表示的是在链子末端的宝石。

    Output

    只有一个整数,表示所需要的最少的操作次数.

    Sample Input

    3 CAT
    3 TAC
    5 CATCH

    Sample Output

    8


    HINT

    提示:100%的数据中,N<=50.
    50%的数据中,N<=20.

    思路 :

      考虑先把两个串弄成一样的, 这样就是把两个串LCP留下,后面的删掉或者补出其他的, 对于第三个串, 显然前两个串尽可能的少不会出现更差的解,故把两个有最长LCP的切到只剩LCP, 另外一个切到自己和另两个之一(因为另两个的长, 其实就是三个剩余串的LCP) 的LCP, 再把少的部分补上, 水题, 看代码更明白。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    char s[4][60]; int len[4]; int lcp[4][4]; 
    int mxn, mi, x1, x2; 
    int calc(int x, int y) {
        int lim = min(len[x], len[y]); 
        for(int i=0;i<lim;i++) {
            if(s[x][i]!=s[y][i]) 
                return i; 
        } 
        return lim; 
    } 
    int main() {
        for(int i=1;i<=3;i++) {
            scanf("%d%s", &len[i], s[i]); 
        } 
        x1=1,x2=2,mi=3; 
        for(int i=1;i<=3;i++) {
            for(int j=i+1;j<=3;j++) {
                lcp[i][j] = lcp[j][i] = calc(i, j); 
                if(lcp[i][j]>mxn) mxn=lcp[i][j], mi = 6-i-j, x1=i,x2=j; 
            } 
        } 
        int ans = 0; 
        ans += len[x1]+len[x2]-lcp[x1][x2]*2; 
        len[x1] = len[x2] = lcp[x1][x2]; 
        ans+=len[mi]+len[x1]-lcp[mi][x1]*2; 
        printf("%d
    ", ans); 
    }
    
  • 相关阅读:
    C语言实现mq收发数据的函数
    4G通信模块在ARM平台下的应用
    4G 通信模块在ARM 平台下的应用
    修改web前端访问端口
    从零开始用 Flask 搭建一个网站(一)
    Python实现Windows定时关机
    前端和后端的数据交互(jquery ajax+python flask+mysql)
    python开源项目及示例代码
    Django读取Mysql数据并显示在前端
    C++关于string的一些用法
  • 原文地址:https://www.cnblogs.com/Tobichi/p/9247655.html
Copyright © 2011-2022 走看看