比赛 2026.5.30 评测结果 AAAAAAAAEEEEEEEEEEEE
题目名称 雨和卡布奇诺 最终得分 40
用户昵称 zcx 运行时间 1.805 s
代码语言 C++ 内存使用 3.55 MiB
提交时间 2026-05-30 10:19:04
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=502;
const int M=1e5+2;

int n,m,q=0,tot=0;
int t[N],u[N],cf[2*M+N],key[2*M+N],mv[2*M+N];
bool used[N];

vector<int> a[N];
vector<int> b[N];
vector<int> c[N];
vector<int> d[N];

int find(int x){
    int l=1,r=tot;
    while(l<r){
        int mid=(l+r)>>1;
        if(mv[mid]<x) l=mid+1;
        else r=mid;
    }
    return l;
}
signed main()
{
    freopen("Cappuccino.in","r",stdin);
    freopen("Cappuccino.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>t[i]>>u[i],key[i]=t[i];
    q=n;
    cin>>m;
    for(int i=1;i<=m;i++){
        int l,k;
        cin>>l;
        for(int j=1;j<=l;j++){
            int x,y;cin>>x>>y;
            a[i].push_back(x);
            b[i].push_back(y);
            key[++q]=x;
        }
        cin>>k;
        for(int j=1;j<=k;j++){
            int x,y;cin>>x>>y;
            c[i].push_back(x);
            d[i].push_back(y);
            key[++q]=x;
        }
    }
    sort(key+1,key+1+q);
    for(int i=1;i<=q;i++){
        if(key[i]!=key[i-1]){
            mv[++tot]=key[i];
        }
    }
    for(int i=1;i<=n;i++){
        t[i]=find(t[i]);
        cf[t[i]]=u[i];
    }  
    for(int i=1;i<=m;i++){
        for(int j=0;j<b[i].size();j++) a[i][j]=find(a[i][j]);
        for(int j=0;j<c[i].size();j++) c[i][j]=find(c[i][j]);
    }
    int ans=0;
    while(1){
        int flag=0;
        for(int i=1;i<=m;i++){
            if(used[i]) continue;
            int fl=1;
            for(int j=0;j<a[i].size();j++){
                if(cf[a[i][j]]<b[i][j]){
                    fl=0;
                    break;
                }
            }
            if(fl){
                used[i]=1;
                ans++;
                flag=1;
                for(int j=0;j<c[i].size();j++){
                    cf[c[i][j]]+=d[i][j];
                }
            }
        }
        if(!flag) break;
    }
    cout<<ans<<endl;
    return 0;
}