P1570 KC喝咖啡

P1570 KC喝咖啡

题目分析:

  • 一个裸的01分数问题
  • 答案区间[l,r] (l = 0,r = inf)




代码如下:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>

using namespace std;

#define inf 0x3f3f3f3f
#define eps 1e-6
#define db double
#define ll long long
#define  mm(a,x) memset(a,x,sizeof a)
#define pii pair<int,int>
#define pb push_back
#define el endl
#define debug(x) cerr<<#x<<" = "<<x<<endl
#define fgx cerr<<"-------------------------"<<endl
#define shutio ios::sync_with_stdio(false),cin.tie(0)
#define  mk make_pair
#define lowbit(x) (x) & (-x)
#define fi first
#define se second

const int N = 210;

int n,m;
struct Node{
    db v,c,w;
}node[N];

bool cmp(Node a,Node b){
    return a.w > b.w;    
}

bool check(db x){
    db s = 0;
    for(int i = 0; i < n; i ++ ){
        node[i].w = node[i].v - x * node[i].c;
    }
    sort(node,node + n,cmp);    
    for(int i = 0; i < m; i ++ ){
        s += node[i].w;
    }
    return s >= 0;
}

int main() {
    shutio;
    cin >> n >> m;
    for(int i = 0; i < n; i ++ ){
        cin >> node[i].v;
    }
    for(int i = 0; i < n; i ++ ){
        cin >> node[i].c;
    }    
    db l = 0,r = inf;
    while(r - l > eps){
        db mid = (l + r) / 2;
        if(check(mid)) l = mid;
        else r = mid;
    }
    printf("%.3f",l);
    return 0;
}
全部评论

相关推荐

大猪蹄子哥:1-谁教你这么写教育经历的……咱都这个学历了,很多公司要看本科、硕士,Gap Year的,你啪就给一个上大26届硕士,没了。 2-那堆奖学金揉成一行放最后得了,放前面显得你没技术自信,还是那句话,对于咱这个学历直接上重点,你这上半段看起来像个大专(无恶意 3-专业技能最好点出来细化方向,你熟悉的以太网是UDP还是TCP,是千兆还是万兆等等,多种信号处理……那你倒是说两个啊,后面空着干嘛,会的干嘛不讲 4-项目经历废话太多,描述不专业(怎么还有我,我们这种词),没有数据支撑(是婴儿还是巨人看不出来)。最后如果这些是真的XX项目、比赛,最好点出来,不然更显得像自学着玩的,或者说抄的(经典复现等于我做过 5-个人总结在咱这个分段没用
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务