| 比赛 |
2026.5.30 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
雨和卡布奇诺 |
最终得分 |
100 |
| 用户昵称 |
xuyuqing |
运行时间 |
0.977 s |
| 代码语言 |
C++ |
内存使用 |
8.91 MiB |
| 提交时间 |
2026-05-30 09:50:40 |
显示代码纯文本
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <queue>
#include <unordered_map>
#include <utility>
#include <vector>
using namespace std;
const int N = 100010;
long long n;
long long m;
unordered_map<long long, long long> nums;
long long needCc[N];
vector<pair<long long, long long>> gives[N];
unordered_map<long long, vector<pair<long long, long long>>> coffee;
queue<long long> q;
long long res;
bool cmp (pair<long long, long long> one, pair<long long, long long> two) {
return one.second > two.second;
}
int main () {
freopen ("Cappuccino.in", "r", stdin);
freopen ("Cappuccino.out", "w", stdout);
// cin >> n;
scanf ("%lld", &n);
for (long long i = 1; i <= n; i++) {
long long t;
long long u;
// cin >> t >> u;
scanf ("%lld%lld", &t, &u);
nums[t] = u;
}
// cin >> m;
scanf ("%lld", &m);
for (long long i = 1; i <= m; i++) {
long long l;
// cin >> l;
scanf ("%lld", &l);
bool flag = true;
for (long long j = 1; j <= l; j++) {
long long t;
long long u;
// cin >> t >> u;
scanf ("%lld%lld", &t, &u);
if (u > nums[t]) {
flag = false;
needCc[i]++;
coffee[t].emplace_back(i, u);
}
}
if (flag) {
q.push(i);
}
long long k;
// cin >> k;
scanf ("%lld", &k);
for (long long j = 1; j <= k; j++) {
long long t;
long long u;
// cin >> t >> u;
scanf ("%lld%lld", &t, &u);
gives[i].emplace_back(t, u);
}
}
for (auto it = coffee.begin(); it != coffee.end(); it++) {
sort (it->second.begin(), it->second.end(), cmp);
}
while (!q.empty()) {
long long now = q.front();
q.pop();
res++;
for (auto it = gives[now].begin(); it != gives[now].end(); it++) {
long long id = it->first;
long long num = it->second;
nums[id] += num;
for (auto jt = coffee[id].rbegin(); !coffee[id].empty(); jt = coffee[id].rbegin()) {
long long jd = jt->first;
long long & need = jt->second;
if (need > nums[id]) {
break;
}
if (needCc[jd] > 0) {
needCc[jd]--;
if (needCc[jd] == 0) {
q.push(jd);
}
}
coffee[id].pop_back();
}
}
}
// cout << res << endl;
printf ("%lld", res);
return 0;
}