(福建工程大ACM程序設計)E題分配物資(模擬題)

連接: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;
}
相關文章
相關標籤/搜索