1 solutions

  • 0
    @ 2025-3-3 16:21:29

    C++ :

    #include<iostream>
    #include<cstring>
    using namespace std;
    struct person{
    string name;
    int money;
    }a[12];         //存储每个人的名字和钱数 
    string name_out,name_in;
    int n,mout,num,sum;
    int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].name;//输入所有人名字 
    for(int i=1;i<=n;i++){
        sum=1;
        cin>>name_out>>mout>>num;//输入姓名,钱数,收礼人数 
        if(!num||!mout) continue;//如果给别人的钱数或人数为0,不进行运算 
        for(int j=1;j<=num;j++){
            cin>>name_in;//收礼人姓名 
            for(int k=1;k<=n;k++){
                if(sum&&a[k].name==name_out){
                    sum--;//用sum保证只减去一次 
                    a[k].money-=mout/num*num;//表示减去给别人的钱数 
                }
                if(a[k].name==name_in) a[k].money+=mout/num;//增加钱数 
            }
        }
    }
    for(int i=1;i<=n;i++) cout<<a[i].name<<" "<<a[i].money<<endl;//输出 
    }
    
    • 1

    【基础】贪婪的送礼者Greedy Gift Givers(USACO1.1)

    Information

    ID
    9979
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By