欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

A Great Alchemist

系統 1883 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條評論
主站蜘蛛池模板: 欧美老妇交乱视频 | 亚洲国产精品一区 | 免费污视频 | 色婷婷亚洲五月色综合色 | 久久国产精品久久 | 五月婷六月丁香狠狠躁狠狠爱 | 久久福利在线 | 国产牛仔裤系列在线观看 | 成人免费无毒在线观看网站 | 成人精品视频一区二区三区尤物 | 国产精品男人的天堂 | 亚洲欧美日韩在线一区 | 欧美亚洲视频一区 | 国产一区二区不卡 | 高清久久| 美女久久久久久久久久久 | 九九热视频免费 | 亚洲精品第一国产综合野 | 加勒比色 | 在线看av网址 | 成人亚洲国产精品久久 | 成人国产一区二区三区 | 天天色综合社区 | 日本在线播放不卡一区二区三区 | 99精品国产免费久久国语 | 天堂亚洲网 | 天天操伊人 | 久久久久亚洲精品 | 国产精品亚洲综合 | 欧洲精品视频在线观看 | 一级做a爰片性色毛片视频图片 | 亚洲精品a| 中文字幕av一区二区 | 干干干操操操 | 色综合天天综合中文网 | v片在线播放 | 久久久人 | 国产午夜精品AV一区二区 | 午夜色大片在线观看 | 欧美第一页草草影院浮力 | 不卡国产一区二区三区四区 |