链接:https://ac.nowcoder.com/acm/contest/289/E
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
要将n种物资分配到m个村庄中.村庄按照1,2,3...m编号.
已知第i种物资有Ai个.
第i个村庄只需某一种物资Bi个.
物资按照村庄编号升序发放.
问第i个村庄能否得到所需物资,
如果不能得到所需物资,那么差几个物资.
输入描述:
多组数据,直到EOF. 输入数据中每组数据以空行隔开
第一行输入n, m, q. n表示物资种类数, m表示村庄个数. q表示询问个数
接下来输入n行,每行输入一个整数Ai, 表示第i种物资的个数.
再接下来m行,每行输入两个整数 a Bi, 表示第i个村庄需要a物资 Bi个.
最后q行,每行只有一个数i, 询问第i个村庄是否得到所需物资.
1<=n<=103, 1<=m<=106, 1<=q<=106
0<=Ai<=106, 0<=Bi<=106
输出描述:
每个询问输出一行. 如果可以得到所需物资则输出 Yes, 否则输出该村庄差多少个物资.
示例1
输入
3 3 3 5 15 8 1 6 2 3 3 16 1 2 3 3 5 6 5 8 15 2 7 2 10 1 5 3 100 3 123 1 2 3 4 5 1
输出
1 Yes 8 Yes 9 Yes 85 123 Yes
题解:模拟即可,我竟然犯了一个特别无语的错误,我想当然的把输出YES了,然后就一直WA,样例也过不来了,竟然是Yes,难受,自闭
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int a[1005];
int b[1000005];
int main() {
int n,m,q;
while(scanf("%d%d%d",&n,&m,&q)!=EOF) {
memset(b,0,sizeof(b));
for(int t=0; t<n; t++) {
scanf("%d",&a[t]);
}
int l,r;
for(int t=0; t<m; t++) {
scanf("%d%d",&l,&r);
b[t+1]=a[l-1]-r;
if(a[l-1]>=r)
a[l-1]-=r;
else {
a[l-1]=0;
}
}
int k;
for(int t=0; t<q; t++) {
scanf("%d",&k);
if(b[k]>=0) {
printf("Yes
");
} else {
printf("%d
",-1*b[k]);
}
}
}
return 0;
}