摸底测试链接http://oj.jxust.edu.cn/contest?id=1702
A.Water
思路:题面说的是随机操作,但是实际上只是输入数据随机,操作的时候怎么操作都是可以的,只需要用数组存一下每个水瓶倒多少水,然后从第一个开始往后倒,如果有多就传给下一个瓶子,如果不够就直接全部赋给这一个瓶子就行了。
#include<bits/stdc++.h> #include<vector> #include<map> #include<queue> #define LL long long #define INF 0x3f3f3f3f #define MOD 1000000007 using namespace std; LL a[100005], b[100005], ans[100005]; int main() { LL t, n, m, x, y; scanf("%lld", &t); while(t--) { scanf("%lld%lld", &n, &m); for(int i = 1;i <= n;i++) { scanf("%lld", &a[i]); b[i] = 0; } for(int i = 1;i <= m;i++) { scanf("%lld%lld", &x, &y); b[x] += y; } for(int i = 1;i <= n;i++) { if(b[i] >= a[i]) { ans[i] = a[i]; b[i] -= a[i]; //printf("ai = %d\n", a[i]); //printf("ansi = %d\n", ans[i]); b[i+1] += b[i]; } else { ans[i] = b[i]; b[i] = 0; } } for(int i = 1;i <= n;i++) { if(i < n) printf("%lld ", ans[i]); else printf("%lld\n", ans[i]); } } return 0; }
原文:https://www.cnblogs.com/Mamba0Z/p/11959155.html