題解 P1201 【[USACO1.1]貪婪的送禮者Greedy Gift Givers】

這一題挺簡單的,可是若是是純模擬的話。會十分麻煩c++

這裏介紹一個\(STL\)映射\(map\)數組

\(map\)的最大優勢是可使用任意數據類型做爲數組的下標spa

\(map\)的定義形式爲 map< 下標類型 , 存放的數據類型 > 數組名code

如: \(map<string ,int >ans\)ci

\(map\)的使用方法與普通數組無異string

\(map\)數組中值默認爲\(0\)it

此題所需注意的點class

貪婪者送出去的錢是要減去的map

x%y&&y!=0 不然會 \(RE\)數據類型

#include "bits/stdc++.h"
using namespace std;
int n,num,money;
string name[11];
map<string,int>ans;//map定義
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        cin>>name[i];
    for(int i=1;i<=n;i++) {
        string na;
        cin>>na>>money>>num;
        ans[na]-=money;//先減去,反正後面不能分完會加回來
        if(!num) {//特判 被模數
            if(money)
                ans[na]+=money;//若是有錢,收入本身囊中
            continue;
        }
        if(!money)//沒錢,免談!!!
            continue;
        if(money%num)//判斷是否有剩餘
            ans[na]+=(money%num),money-=(money%num);
        for(int j=1;j<=num;j++)
            cin>>na,ans[na]+=(money/num);//把分出去的錢加上收禮者的數組裏
    }
    for(int i=1;i<=n;i++)
        cout<<name[i]<<' '<<ans[name[i]]<<endl;//輸出
    return ac;
}

手動防抄襲

相關文章
相關標籤/搜索