24h購物| | PChome| 登入
2012-09-01 19:04:51| 人氣412| 回應0 | 上一篇 | 下一篇

[ACM-ICPC][Asia - Daejeon] 5844 - Leet

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

字串處理題, 窮舉映射對象, 然後 dfs 即可




#include <stdio.h>
#include <string.h>
#include <map>
#include <iostream>
using namespace std;
map<char, string> r;
int k, sL, letL, flag;
string s, let;
void dfs(int i, int j) {
    if(i == sL && j == letL) {
        flag = 1;
        return;
    }
    if(i > sL || j > letL)
        return;
    if(flag)    return;
    if(r[s[i]] != "") {
        string tmp = r[s[i]];
        int len = tmp.length(), h;
        for(h = 0; h < len; h++) {
            if(let[j+h] != tmp[h])
                return;
        }
        dfs(i+1, j+len);
    } else {
        int h;
        for(h = 1; h <= k; h++) {
            r[s[i]] = let.substr(j, h);
            dfs(i+1, j+h);
        }
        r[s[i]] = "";
    }
}
int main() {
    int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &k);
        cin >> s >> let;
        flag = 0;
        sL = s.length(), letL = let.length();
        r.clear();
        dfs(0,0);
        printf("%d\n", flag);
    }
    return 0;
}

台長: Morris
人氣(412) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: UVA |
此分類下一篇:[ACM-ICPC][Asia - Daejeon] 5848 - Soju
此分類上一篇:[ACM-ICPC][Asia - Daejeon] 5846 - Neon Sign

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