分配物資(模擬)
阿新 • • 發佈:2019-01-06
連結: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\n"); } else { printf("%d\n",-1*b[k]); } } } return 0; }