codeforce 605BE. Freelancer's Dreams

题意:给你n个工程,做了每个工程相应增长x经验和y钱。问你最少需要多少天到达制定目标。时间可以是浮点数。

思路:杜教思路,用对偶原理很简易。个人建议还是标准解题法,凸包+线性组合。

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 #include<cstdio>
 6 #include<set>
 7 #include<map>
 8 #include<vector>
 9 #include<cstring>
10 #include<stack>
11 #include<cmath>
12 #include<queue>
13 #include <bits/stdc++.h>
14 using namespace std;
15 #define CL(x,v); memset(x,v,sizeof(x));
16 #define INF 0x3f3f3f3f
17 #define LL long long
18 const int SIGMA_SIZE = 26;
19 const int MAXNODE = 111000;
20 const int MAXS = 150 + 10;
21 const int maxn = 1e5+10;
22 int a[maxn], b[maxn];
23 int n, p, q;
24
25 double f(double x)
26 {
27     double y = 1;
28     for(int i=0;i<n;i++) y = min(y, (1.0 - x*b[i]) / a[i]);
29     return y*p + x*q;
30 }
31
32 int main()
33 {
34     cin >> n >> p >> q;
35     for(int i=0;i<n;i++) cin >> a[i] >> b[i];
36     double l=0, r = 1./ (*max_element(b, b+n));
37     for(int i=0;i<200;i++)
38     {
39         double ll = (l+l+r)/3, rr = (r + r+l)/3;
40         if(f(ll) > f(rr)) r = rr;
41         else l = ll;
42     }
43     printf("%.10f\n", f((l+r)*0.5));
44     return 0;
45 }

codeforce 605BE. Freelancer's Dreams

时间: 2024-10-15 01:26:09

codeforce 605BE. Freelancer's Dreams的相关文章

Codeforces Round #335 (Div. 1)--C. Freelancer&#39;s Dreams 线性规划对偶问题+三分

题意:p, q,都是整数. sigma(Ai * ki)>= p, sigma(Bi * ki) >= q; ans = sigma(ki).输出ans的最小值 约束条件2个,但是变量k有100000个,所以可以利用对偶性转化为求解 ans = p * y1 + q * y2 约束条件为: Ai * y1 + Bi * y2 <= 1 其中i为0~n-1 也就是n个约束条件. 后面三分搞搞就好了 1 #include <bits/stdc++.h> 2 using names

[CodeForces-606E] Freelancer&#39;s Dreams 凸包 模型转换

大致题意: 有一个人想要获得p个经验点和q元钱.现在给出n份工作,每份工作每天能得到Ai的经验值和Bi的钱,问最少需要工作多少天, 能使得总经验值>=p,总钱>=q. 先对给出的n份工作以及原点O(0,0),x轴的最大点(maxx,0),y轴最大点(0,maxy)构建凸包,根据凸组合,可知凸包上所有得点以 及凸包边上的点都可以由一天时间得到,那么只要求出射线O~P(p,q)与凸包的交点,即可求出最后的结果. 1 #include<cstdio> 2 #include<iost

Codeforces 605C Freelancer&#39;s Dreams 凸包

Freelancer's Dreams 我们把每个二元组看成是平面上的一个点, 那么两个点的线性组合是两点之间的连线, 即x * (a1, b1) + y * (a1, b1) && x + y == 1, 那么n个点的线性组合就是一个凸包, 那么我们求出凸包和(0, 0)到(p, q)直线的交的那个较大值就是最优的组合平均速度. 需要注意的是, 直线和凸包可能没有交点, 需要加入(maxa, 0), (0, maxb)这两个点. #include<bits/stdc++.h>

关于可以免费接单的Freelancer.com网站

Freelancer.com 是一个可以免费接单的网站. 上面有一些雇主发布的开发需求. 注册之后,对开发者而言,许多是免费的. 在朋友的推荐下,我注册了. 网址: freelancer.com 但英文不好就会吃亏了.. 注册是可以,但注意不要点接收邮件.查看,头像,自己是不是免费会员. 注册时,填了信用卡.和aws.amazon.com一样. 国外的网站服务,收费方面,也是写得很详细: https://www.freelancer.com/feesandcharges/ 我当时没有细看, 注册

[rap song] Jessi – Unpretty Dreams Lyrics (Prod.by GRAY)

Jessi – Unpretty Dreams Lyrics (Prod.by GRAY)   [Intro] I did it for the love [verse 1] I realized that all that matters it me and minet jogeumssik na chojeomeul ilheoga A young girl with big dreamt but appreciate gijeogirago neukkyeo yeogikkaji onge

CodeForce 448C 木片填涂问题

题目大意:有多片木片需要填涂,可以每次横着涂一行,也可以一次涂一列,当然你涂一行时遇到中间长度不够高的木片,填涂到此中断 这题目运用dfs能更容易的解出,虽然还是十分不容易理解 1 #include <iostream> 2 3 using namespace std; 4 5 #define N 5010 6 int a[N],n; 7 8 int Min(int c,int d) 9 { 10 return c<d?c:d; 11 } 12 int dfs(int c,int d,i

Codeforce 水题报告(2)

又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数(n<=200). 首先很明显可能是区间dp,我们可以记f[i][j]为从i到j的这个多边形的三角剖分数,那么f[i][j]=f[i][k]*f[j][k]*(i,j,k是否为1个合格的三角形) CodeForces 438D:The Child and Sequence 描述:给一个序列,要求支持区

codeforce 285 div2 D 题解

codeforce 285 div2 D 题解 说明 这道题目是看了思路分析才知道的,关键问题在于数据量过大,需要快速检索的同时不能辅助空间过大. 因此利用了下面3种方法结合解决该问题 康拓展开与逆康拓展开 树状数组 二分查找 代码 /** * @brief Codeforces Round #285 (Div. 2) d * @file d.cpp * @author mianma * @created 2015/01/27 18:18 * @edited 2015/01/29 22:45 *

codeforce Pashmak and Buses(dfs枚举)

1 /* 2 题意:n个同学,k个车, 取旅游d天! 3 要求所有的学生没有两个或者两个以上的在同一辆车上共同带d天! 输出可行的方案! 4 5 对于d行n列的矩阵,第i行第j列表示的是第i天第j个同学所在的车号! 6 也就是保证所有行不全相同,即每一列都是不相同的! 7 如果每一列都不相同就是表示第j个同学(第j列)在这d天中不会和其他同学(列)在这d天中 都在同一辆车中! 8 9 思路:对于每一列我们枚举d天该学生所在的车号!它的下一列只保证有一个元素和它不同就行了!依次下去! 10 11