zoukankan      html  css  js  c++  java
  • 【luoguP2989】[USACO10MAR]对速度的需要Need For Speed

    题目描述

    最大化平均值

    二分一个(x)

    (check):

    (frac{F+sum_{i=1}^{n} X_{i} imes F_{i}}{M+sum_{i=1}^{n} X_{i} imes M_{i}}geq x)

    (F+sum_{i=1}^{n} X_{i} imes F_{i} geq M imes x+sum_{i=1}^{n} X_{i} imes M_{i} imes x)

    (F-M imes x+sum_{i=1}^{n} (X_{i} imes F_{i}-X_{i} imes M_{i} imes x)ge 0)

    贪心的将(1)(n)中大于(0)((X_{i} imes F_{i}-X_{i} imes M_{i} imes x))加起来,判断一下就可以了

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    const int MAXN=10010;
    
    int n,M,F,f[MAXN],m[MAXN];
    
    inline bool check(double x){
    	double sum=F-M*x;
    	for(int i=1;i<=n;++i)
    		sum+=max(0.0,f[i]-m[i]*x);
    	return sum>=0;
    }
    
    int main()
    {
    	scanf("%d%d%d",&F,&M,&n);
    	for(int i=1;i<=n;++i)
    		scanf("%d%d",&f[i],&m[i]);
    	double l=0,r=1e18;
    	while(r-l>0.001){
    		double mid=(l+r)/2.0;
    		if(check(mid)) l=mid;
    		else r=mid;
    	}
    	bool flag=0;
    	for(int i=1;i<=n;++i)
    		if(f[i]-m[i]*l>0) printf("%d
    ",i),flag=1;
    	if(!flag) puts("NONE");
    	return 0;
    }
    
  • 相关阅读:
    maven笔记
    enum笔记
    mysql笔记
    git笔记
    spark笔记
    使用GitHub进行团队合作
    深度学习网站
    顶级论文索引网站
    研究生-数学建模集
    算法练习网站
  • 原文地址:https://www.cnblogs.com/yjkhhh/p/11744150.html
Copyright © 2011-2022 走看看