比赛 2026.5.30 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 雨和卡布奇诺 最终得分 100
用户昵称 ChenBp 运行时间 2.169 s
代码语言 C++ 内存使用 17.76 MiB
提交时间 2026-05-30 10:08:30
显示代码纯文本
#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N=1e5+5;
vector<int>c[N],d[N];
struct node{
    int x,bl;
};
unordered_map<int,int>mp;
vector<node>re[3*N];
int de[3*N];
int cnt=0;
long long h[3*N];
int l[N],da[N];
int main() {
    freopen("Cappuccino.in","r",stdin);
    freopen("Cappuccino.out","w",stdout);
    int n,m;
    cin>>n;
    for(int i=1;i<=n;i++) {
        int t,u;
        cin>>t>>u;
        mp[t]=++cnt;
        h[cnt]=u;
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        int k,x,y;
        cin>>l[i];
        for(int j=1;j<=l[i];j++){
            cin>>x>>y;
            if(!mp.count(x)) mp[x]=++cnt;
            re[mp[x]].push_back({y,i});
        }
        cin>>k;
        for(int j=1;j<=k;j++){
            cin>>x>>y;
            if(!mp.count(x)) mp[x]=++cnt;
            c[i].push_back(mp[x]);
            d[i].push_back(y);
        }
    }
    for(int i=1;i<=cnt;i++){
        sort(re[i].begin(),re[i].end(),[](node x,node y){return x.x<y.x;});
    }
    
//    cout<<"---\n";
//    for(int i=1;i<=cnt;i++){
//        cout<<"#"<<i<<":\n";
//        for(auto j:re[i]){
//            cout<<j.x<<' '<<j.bl<<'\n';
//        }
//    }
//    cout<<"---\n";
    
    bool fl=1;
    int ans=0;
    for(int bl=1;bl<=m;bl++){
        if(l[bl]==0){
//            cout<<"*"<<bl<<endl;
            ans++;
            for(int j=0;j<c[bl].size();j++){
                h[c[bl][j]]+=d[bl][j];
            }
        }
    }
    while(fl){
        fl=0;
        for(int i=1;i<=cnt;i++){
            while(de[i]<re[i].size()&&re[i][de[i]].x<=h[i]){
                int bl=re[i][de[i]].bl;
//                cout<<i<<" "<<bl<<endl;
                da[bl]++;
                fl=1;
                if(da[bl]==l[bl]){
//                    cout<<"*"<<bl<<endl;
                    ans++;
                    for(int j=0;j<c[bl].size();j++){
                        h[c[bl][j]]+=d[bl][j];
                    }
                }
                de[i]++;
            }
        }
    }
    cout<<ans;
    return 0;
}