zoukankan      html  css  js  c++  java
  • CF42A

    题意

    给定两个序列 a 和 b。

    序列 a 中的各个数之间的比例可以得出一个 x 。

    当 b 中比例满足 a 中比例,即 (b_1):(b_2):(b_3)…… (=) (a_1):(a_2):(a_3)……时,可以得出一个数 $x * dfrac{b}{a} $。


    分析

    因为这是做汤按照一定比例才能得出一个与 x 成倍数关系的数

    所以我们可以知道,如果有一个数与其他的数不成比例且小于其他数时,整个数列得出的数都会被那个数影响

    所以我们先找出所有的 b/a 里面最小的那个,因为他决定了结果的大小。

    然后让整个数列都以这个最小比例做汤求 x 。

    另外,他给定了锅的大小也就是 x 的上限 v ,所以得出的那个数如果超过 v ,那就要把它赋值成 v 就好了。

    注意:他要求你的数要与他的答案的差值大小不超过十的负四次方,也就是要你至少精确到小数点后四位


    代码

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #define maxn 300050
    #define maxm 1010
    
    using namespace std;
    
    int n;
    double v,a[maxn],b[maxn],x[maxn];
    
    int main(){
    	cin>>n>>v;
    	for(int i=1;i<=n;i++) cin>>a[i]; 
    	for(int i=1;i<=n;i++) cin>>b[i];
    	for(int i=1;i<=n;i++){
    		x[i]=b[i]/a[i];
    	} 
    	sort(x+1,x+n+1);我开了一整个数组来求一个最小值有点浪费,其实可以通过边求边比的方法取;
    	double ans=0.0;
    	for(int i=1;i<=n;i++){
    		ans+=x[1]*a[i];
    	}
    	ans=min(ans,v);
    	printf("%.4lf",ans);
    	return 0;
    }
    

    制作不易,不喜勿喷。

  • 相关阅读:
    监控 | open-falcon | 安装
    日语 | 日本50音
    PXE | 开关机
    linux | 网卡驱动
    Linux——Centos 7 chmod命令
    Linux——Centos 7 ls命令
    Linux——Centos 7 passwd命令
    Linux——Centos 7 账户管理命令(用户组篇)groupadd groupmod groupdel
    Linux——Centos 7 账户管理命令(用户篇)useradd usermod userdel
    Linux——Centos 7 diff命令
  • 原文地址:https://www.cnblogs.com/KnightL/p/13935250.html
Copyright © 2011-2022 走看看