連接: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; }