Gym 101873K - You Are Fired - [贪心水题]

题目链接:http://codeforces.com/gym/101873/problem/K

题意:

现在给出 $n(1 \le n \le 1e4)$ 个员工,最多可以裁员 $k$ 人,名字为 $s_i$ 的员工的薪资为 $c_i(1 \le c_i \le 1e5)$。

已知必须节省下 $d(1 \le d \le 1e9)$ 元才能拯救公司,问要裁员哪些人。

题解:

薪资越高的人越要裁掉。

(这么个大水题,居然没人发现,交的人不多。可能是这套题英语阅读量有点烦人吧……)

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+10;
int n,d,k;
struct P{
    string s;
    int c;
    bool operator<(const P& oth)const {
        return c>oth.c;
    }
}p[maxn];

int main()
{
    cin>>n>>d>>k;
    for(int i=1;i<=n;i++) cin>>p[i].s>>p[i].c;
    sort(p+1,p+n+1);
    int sum=0;
    vector<int> ans;
    for(int i=1;i<=k;i++)
    {
        sum+=p[i].c;
        ans.push_back(i);
        if(sum>=d) break;
    }
    if(sum<d) cout<<"impossible"<<endl;
    else
    {
        cout<<ans.size()<<endl;
        for(int i=0;i<ans.size();i++) {
            cout<<p[ans[i]].s<<", YOU ARE FIRED!"<<endl;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/dilthey/p/9931627.html