zoukankan      html  css  js  c++  java
  • Google Code Jam 2009 Qualification Round Problem C. Welcome to Code Jam

    本题的 Large dataset 本人尚未解决。

    https://code.google.com/codejam/contest/90101/dashboard#s=p2

    Problem

    So you've registered. We sent you a welcoming email, to welcome you to code jam. But it's possible that you still don't feel welcomed to code jam. That's why we decided to name a problem "welcome to code jam." After solving this problem, we hope that you'll feel very welcome. Very welcome, that is, to code jam.

    If you read the previous paragraph, you're probably wondering why it's there. But if you read it very carefully, you might notice that we have written the words "welcome to code jam" several times: 400263727 times in total. After all, it's easy to look through the paragraph and find a 'w'; then find an 'e' later in the paragraph; then find an 'l' after that, and so on. Your task is to write a program that can take any text and print out how many times that text contains the phrase "welcome to code jam".

    To be more precise, given a text string, you are to determine how many times the string "welcome to code jam" appears as a sub-sequence of that string. In other words, find a sequence s of increasing indices into the input string such that the concatenation of input[s[0]], input[s[1]], ..., input[s[18]] is the string "welcome to code jam".

    The result of your calculation might be huge, so for convenience we would only like you to find the last 4 digits.

    Input

    The first line of input gives the number of test cases, N. The next N lines of input contain one test case each. Each test case is a single line of text, containing only lower-case letters and spaces. No line will start with a space, and no line will end with a space.

    Output

    For each test case, "Case #x: dddd", where x is the case number, and dddd is the last four digits of the answer. If the answer has fewer than 4 digits, please add zeroes at the front of your answer to make it exactly 4 digits long.

    Limits

    1 ≤ N ≤ 100

    Small dataset

    Each line will be no longer than 30 characters.

    Large dataset

    Each line will be no longer than 500 characters.

    Sample


    Input 
     

    Output 
     
    3
    elcomew elcome to code jam
    wweellccoommee to code qps jam
    welcome to codejam

    Case #1: 0001
    Case #2: 0256
    Case #3: 0000

    Solution (For small dataset only):

    string welcome = string("welcome to code jam");
    int tc = 0;
    int fo[19], cp[19];
    string input;
    int inlen;
    
    void radd(int begin_chr, int last_pos) {
        if (begin_chr > 18) return;
        
        int cp = fo[begin_chr];
        if (last_pos > cp) cp = last_pos;
        
        while (cp < inlen) {
            if (input[cp] == welcome[begin_chr]) {
                if(begin_chr == 18) {
                    tc++;
                    if (tc == 10000) tc = 0;
                }
                
                radd(begin_chr + 1, cp);
            }
            
            cp++;
        }
        
        return;
    }
    
    int solve()
    {
    
        int wlen = 19;
        inlen = (int)input.length();
        
        tc = 0;
        
        for (int wi = 0; wi < wlen; wi++) {
            char chr = welcome[wi];
            bool found = false;
            for (int ii = wi; ii < inlen; ii++) {
                if (chr == input[ii]) {
                    fo[wi] = cp[wi] = ii;
                    found = true;
                    break;
                }
            }
            if (!found)
                return 0;
        }
    
        radd(0, 0);
        
        return tc;
    }
    
    int main()
    {
        freopen("in.in", "r", stdin);
        freopen("out.out", "w", stdout);
        
        int T;
        scanf("%d
    ", &T);
        if (!T) {
            cerr << "Check input!" << endl;
            exit(0);
        }
        
        for (int t = 1; t <= T; t++) {
            cerr << "solving: #" << t << " / " << T << endl;
            
            getline(cin, input);
            
            auto result = solve();
            printf("Case #%d: %04d
    ", t, result);
        }
        
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
  • 相关阅读:
    《博客园美化》添加雪花/修改icon
    js获取开始年与结束年之间的年份
    《博客园美化》为您的博客增加一个萌萌的看板娘吧
    JS对比时间大小
    同域名下两个子级域名共享cookie
    input输入框禁止显示历史记录
    C# 操作符 << 与 >>
    如何在IIS上发布网站
    Sql 插入操作时返回当前新增的Id
    JS Cookie操作
  • 原文地址:https://www.cnblogs.com/fatlyz/p/3678894.html
Copyright © 2011-2022 走看看