亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

A Great Alchemist

系統 1801 0

Time limit : 2sec / Stack limit : 256MB / Memory limit : 256MB

Problem
Carol is a great alchemist.

In her world, each metal has a name of 2N (N is an integer) letters long, which consists of uppercase alphabets.

Carol can create metal S3 from S1 and S2 alchemical when she can make the name of S3 by taking N letters each from S1 and S2 then rearranging them properly.

You are given 3 names of the metal S1, S2, S3. Determine wether Carol can create S3 from S1 and S2 or not.

Input
The input will be given in the following format from the Standard Input.

S1
S2
S3
On the first line, you will be given the name of the first metal material S1.
On the second line, you will be given the name of the second metal material S2.
On the third line, you will be given the name of the metal S3, which Carol wants to create.
Each character in the S1, S2, and S3 will be an uppercase English alphabet letter.
Each string S1, S2 and S3 has same number of letters and the number is always even.
It is guaranteed that 2≦|S1|≦100000
Output
If Carol can create S3 from S1 and S2, output YES, if not, output NO in one line. Make sure to insert a line break at the end of the output.

Input Example 1
AABCCD
ABEDDA
EDDAAA
Output Example 1
YES
You can make EDDAAA by picking AAD from the first metal, and AED from the second metal.

Input Example 2
AAAAAB
CCCCCB
AAABCB
Output Example 2
NO
To make AAABCB, you have to take at least four letters from the first material. So this can't be created alchemical.

用回溯法TLE。看了同學的代碼,在執行回溯前執行一些檢查就能過了。哎。

      
         1
      
       #include <iostream>


      
         2
      
       #include <
      
        string
      
      >


      
         3
      
       #include <vector>


      
         4
      
      
        using
      
      
        namespace
      
      
         std;


      
      
         5
      
      
         6
      
      
        bool
      
       backtrack(
      
        string
      
       &S3, 
      
        int
      
       charsFromS1, 
      
        int
      
       charsFromS2, 
      
        int
      
      
         current, 


      
      
         7
      
               vector<
      
        int
      
      > &charsInS1, vector<
      
        int
      
      > &
      
        charsInS2) {


      
      
         8
      
      
        if
      
       (current >= S3.length()) 
      
        return
      
      
        true
      
      
        ;


      
      
         9
      
      
        char
      
       index = S3[current] - 
      
        '
      
      
        A
      
      
        '
      
      
        ;


      
      
        10
      
      
        if
      
       (charsInS1[index] > 
      
        0
      
       && charsFromS1 < S3.length() / 
      
        2
      
      
        ) {


      
      
        11
      
               charsInS1[index]--
      
        ;


      
      
        12
      
      
        if
      
       (backtrack(S3, charsFromS1 + 
      
        1
      
      , charsFromS2, current + 
      
        1
      
      , charsInS1, charsInS2)) 
      
        return
      
      
        true
      
      
        ;


      
      
        13
      
               charsInS1[index]++
      
        ;


      
      
        14
      
      
            }


      
      
        15
      
      
        if
      
       (charsInS2[index] > 
      
        0
      
       && charsFromS2 < S3.length() / 
      
        2
      
      
        ) {


      
      
        16
      
               charsInS2[index]--
      
        ;


      
      
        17
      
      
        if
      
       (backtrack(S3, charsFromS1, charsFromS2 + 
      
        1
      
      , current + 
      
        1
      
      , charsInS1, charsInS2)) 
      
        return
      
      
        true
      
      
        ;


      
      
        18
      
               charsInS2[index]++
      
        ;


      
      
        19
      
      
            }


      
      
        20
      
      
        return
      
      
        false
      
      
        ;


      
      
        21
      
      
        }


      
      
        22
      
      
        23
      
      
        int
      
       main(
      
        int
      
       argc, 
      
        char
      
      **
      
         argv) {


      
      
        24
      
      
        string
      
      
         S1, S2, S3;


      
      
        25
      
           cin >> S1 >> S2 >>
      
         S3;


      
      
        26
      
           vector<
      
        int
      
      > charsInS1(
      
        26
      
      , 
      
        0
      
      ), charsInS2(
      
        26
      
      , 
      
        0
      
      ), charsInS3(
      
        26
      
      , 
      
        0
      
      
        );


      
      
        27
      
      
        28
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i < S1.length(); ++
      
        i) {


      
      
        29
      
               charsInS1[S1[i] - 
      
        '
      
      
        A
      
      
        '
      
      ]++
      
        ;


      
      
        30
      
               charsInS2[S2[i] - 
      
        '
      
      
        A
      
      
        '
      
      ]++
      
        ;


      
      
        31
      
               charsInS3[S3[i] - 
      
        '
      
      
        A
      
      
        '
      
      ]++
      
        ;


      
      
        32
      
      
            }


      
      
        33
      
      
        34
      
      
        int
      
       common13 = 
      
        0
      
      , common23 = 
      
        0
      
      
        ;


      
      
        35
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i < 
      
        26
      
      ; ++
      
        i) {


      
      
        36
      
      
        if
      
       (charsInS3[i] > charsInS1[i] +
      
         charsInS2[i]) {


      
      
        37
      
                   cout << 
      
        "
      
      
        NO
      
      
        "
      
       <<
      
         endl;


      
      
        38
      
      
        return
      
      
        0
      
      
        ;


      
      
        39
      
      
                }


      
      
        40
      
               common13 +=
      
         min(charsInS3[i], charsInS1[i]);


      
      
        41
      
               common23 +=
      
         min(charsInS3[i], charsInS2[i]);


      
      
        42
      
      
            }


      
      
        43
      
      
        44
      
      
        if
      
       (common13 < S3.length() / 
      
        2
      
       || common23 < S3.length() / 
      
        2
      
      
        ) {


      
      
        45
      
               cout << 
      
        "
      
      
        NO
      
      
        "
      
       <<
      
         endl;


      
      
        46
      
           } 
      
        else
      
      
         {


      
      
        47
      
      
        bool
      
       ans = backtrack(S3, 
      
        0
      
      , 
      
        0
      
      , 
      
        0
      
      
        , charsInS1, charsInS2);


      
      
        48
      
               cout << (ans ? 
      
        "
      
      
        YES
      
      
        "
      
       : 
      
        "
      
      
        NO
      
      
        "
      
      ) <<
      
         endl;


      
      
        49
      
      
            }


      
      
        50
      
      
        return
      
      
        0
      
      
        ;


      
      
        51
      
       }
    

?

A Great Alchemist


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美在线播放视频 | 亚洲国产综合精品中文字幕 | 玖玖99视频 | 久久精品爱国产免费久久 | 国产精品福利影院 | 日本成人毛片 | 日日摸夜夜爽人人添 | 国产精品每日更新在线观看 | 久久久不卡国产精品一区二区 | 亚洲韩精品欧美一区二区三区 | 成人夜夜 | 久久精品国1国二国三 | 久久福利网站 | 久久综合成人 | 亚洲二区在线视频 | 国产欧美一区二区三区精品 | 欧美日韩顶级毛片www免费看 | 玖玖在线视频 | 九九热视频精品在线 | 午夜一级影院 | 91亚洲精品久久 | 日本一区二区三 | 欧美久久一区二区 | 亚洲免费视频在线 | 亚欧成人一区二区 | 成视频年人黄网站免费视频 | 狠狠色噜噜狠狠狠8888米奇 | 欧美色大成网站www永久男同 | 97久久精品国产精品青草 | 国产区一区二区三 | 国产日韩精品欧美一区色 | 成人精品| 久久亚洲综合伊人 | 伊人22222| 国内精品久久久久影院6 | 天天色天天射综合网 | 国产一区二区精品久久91 | 成人毛片大全 | 深夜福利剧场 | 欧美日韩中文在线观看 | 欧美成人久久一级c片免费 欧美成人剧情中文字幕 |