2014年12月26日 星期五

2014/12/26 Codeforces 200D. Programming Language

/*
    學習重點:
    各種 <cstring> 的運用
    strtok 弄清楚後神好用 xDDD

    是說 ㄧ次就AC
    沒有bug 頗開心 OwO//
*/
// http://codeforces.com/problemset/problem/200/D
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>

using namespace std;

map<string, int> type;
char procedureName[2000][200];
vector<int> parameter[2000];

map<string, int> var;

int N, M, K;

bool equal(vector<int> &a, vector<int> &b)
{
    if( a.size() != b.size() ) return false;

    for(int i = 0; i < a.size(); i++)
    {
        if( !a[i] || !b[i] ) continue;
        if( a[i] != b[i] ) return false;
    }

    return true;
}

int main()
{
    type["T"] = 0;
    type["int"] = 1;
    type["string"] = 2;
    type["double"] = 3;

    scanf("%d", &N);

    for(int Ni = 0; Ni < N; Ni++)
    {
        char c[200];
        scanf("%*s %[^\n]", c);

        char *ptr;

        ptr = strtok(c, " (),");
        strcpy(procedureName[Ni], ptr);

        while(1)
        {
            ptr = strtok(NULL, " (),");
            if( ptr == NULL ) break;

            if( !strcmp(ptr, "") ) continue;
            parameter[Ni].push_back(type[ptr ] );
        }
    }

    scanf("%d", &M);

    for(int Mi = 0; Mi < M; Mi++)
    {
        char var_type[200], var_name[200];
        scanf("%s %s", var_type, var_name);

        var[var_name ] = type[var_type ];
    }

    scanf("%d", &K);

    for(int Ki = 0; Ki < K; Ki++)
    {
        char c[200];
        scanf(" %[^\n]", c);

        char name[200]; vector<int> par;

        char *ptr;

        ptr = strtok(c, " (),");
        strcpy(name, ptr);

        while(1)
        {
            ptr = strtok(NULL, " (),");
            if( ptr == NULL ) break;

            if( !strcmp(ptr, "") ) continue;
            par.push_back(var[ptr ] );
        }

        int cnt = 0;

        for(int Ni = 0; Ni < N; Ni++)
        {
            if( strcmp(procedureName[Ni], name) ) continue;
            if( !equal(parameter[Ni], par) ) continue;
            cnt++;
        }

        printf("%d\n", cnt);
    }
}

沒有留言:

張貼留言