codeforces 200 D Programming Language(stl)

96 篇文章 0 订阅
64 篇文章 0 订阅

题意:

给出若干个函数声明,再给出若干变量定义,然后给出若干个函数调用,问每个调用有多少个声明的函数是符合这个调用的。


解题思路:

直接把非法字符变成空格然后用stringstream再读入一遍,这样处理字符串简直不能更方便,然后接下来的比较其实就很暴力了。


代码:

#include <bits/stdc++.h>
#define ps push_back
using namespace std;
struct node
{
    string name;
    vector<string>type;
}p[1005];
map<string, string>mp;
bool f(char x)
{
    if((x<='z' && x>='a') || (x>='A' && x<='Z') || (x<='9' && x>='0'))return true;
    return false;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    stringstream ss;
    string str, word;
    int i, j, n, m, k;
    cin>>n;
    getline(cin,str);
    for(i=1; i<=n; i++)
    {
        ss.str("");
        ss.clear();
        getline(cin, str);
        for(int i=0; i<(int)str.size(); i++)if(!f(str[i]))str[i]=' ';
        ss.str(str);
        ss>>word>>word;
        p[i].name=word;
        while(ss>>word)
        {
            p[i].type.ps(word);
        }
    }

    cin>>m;
    getline(cin, str);
    string a, b;
    for(i=1; i<=m; i++)
    {
        cin>>a>>b;
        mp[b]=a;   
    }
    cin>>k;
    getline(cin, str);
    int ans=0;
    for(i=1; i<=k; i++)
    {
        ans=0;
        ss.str("");
        ss.clear();
        getline(cin, str);
        for(int i=0; i<(int)str.size(); i++)if(!f(str[i]))str[i]=' ';
        ss.str(str);
        ss>>p[0].name;
        while(ss>>word)
        {
            word=mp[word];
            p[0].type.ps(word);
        }
        
        for(int i=1; i<=n; i++)
        {
            if(p[0].name!=p[i].name)continue;
            int is=1;
            if(p[i].type.size()!=p[0].type.size())continue;
            for(j=0; j<(int)p[i].type.size(); j++)
            {
                is&=(j<(int)p[0].type.size() && (p[i].type[j]=="T" ||  p[i].type[j]==p[0].type[j]));
            }
            ans+=is;
        }
        p[0].type.clear();
        cout<<ans<<endl;
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值