连接:https://ac.nowcoder.com/acm/contest/289/Eios
要将n种物资分配到m个村庄中.村庄按照1,2,3...m编号.spa
已知第i种物资有Ai个.code
第i个村庄只需某一种物资Bi个.blog
物资按照村庄编号升序发放.ci
问第i个村庄可否获得所需物资,get
若是不能获得所需物资,那么差几个物资.it
多组数据,直到EOF. 输入数据中每组数据以空行隔开io
第一行输入n, m, q. n表示物资种类数, m表示村庄个数. q表示询问个数class
接下来输入n行,每行输入一个整数Ai, 表示第i种物资的个数.test
再接下来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, 不然输出该村庄差多少个物资.
思路:这是道简单模拟题,直接用结构存储村庄的信息再模拟分配物资的过程便可,可是我本身写的时候由于熟练度不够花了十多分钟去调整细节,思路很快就出来了。仍是要多多练习熟练度。
代码以下
#include <iostream> #define maxn 100001 using namespace std; int good[1001]; struct need{ int number; int Rneed; int flag=0; }; int main() { int n,m,q; while(cin>>n>>m>>q) { need ans[maxn]; for(int i=0;i<n;i++) cin>>good[i]; for(int i=0;i<m;i++) cin>>ans[i].number>>ans[i].Rneed; for(int i=0;i<m;i++) { if(ans[i].Rneed>good[ans[i].number-1]) { ans[i].Rneed-=good[ans[i].number-1]; good[ans[i].number-1]=0; } else { good[ans[i].number-1]-=ans[i].Rneed; ans[i].flag=1; } } while(q--) { int i; cin>>i; if(ans[i-1].flag) cout<<"Yes"<<endl; else{ cout<<ans[i-1].Rneed<<endl; } } } return 0; }