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

题意:p, q,都是整数.

sigma(Ai * ki)>= p,

sigma(B* 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 namespace std;
 3 const int maxn = 1e5 + 5;
 4 double A[maxn], B[maxn], p, q;
 5 int n;
 6 double check(double x){
 7     double y = 1e20;
 8     for (int i = 0; i < n; i++){
 9         y = min(y, (1-A[i]*x)/B[i]);
10     }
11     return p * x + y * q;
12 }
13 int main()
14 {
15     #ifndef ONLINE_JUDGE
16         freopen("in.txt","r",stdin);
17     #endif
18     while (~scanf("%d%lf%lf", &n, &p, &q)){
19         for (int i = 0; i < n; i++){
20             scanf("%lf%lf", A+i, B+i);
21         }
22         double l = 0, r = 1.0/(*max_element(A, A+n));
23         for (int i = 0; i < 250; i++){
24             double ml = (l + l + r) / 3;
25             double mr = (r + r + l) / 3;
26             if (check(ml) > check(mr)){
27                 r = mr;
28             }else{
29                 l = ml;
30             }
31         }
32         printf("%.20f\n", check((l+l)/2));
33     }
34     return 0;
35 }

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

时间: 2024-10-12 19:46:34

Codeforces Round #335 (Div. 1)--C. Freelancer's Dreams 线性规划对偶问题+三分的相关文章

Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 连续LIS

C. Sorting Railway Cars An infinitely long railway has a train consisting of n cars, numbered from 1 to n (the numbers of all the cars are distinct) and positioned in arbitrary order. David Blaine wants to sort the railway cars in the order of increa

Codeforces Round #335 (Div. 2)

水 A - Magic Spheres 这题也卡了很久很久,关键是“至少”,所以只要判断多出来的是否比需要的多就行了. #include <bits/stdc++.h> using namespace std; #define lson l, mid, o << 1 #define rson mid + 1, r, o << 1 | 1 typedef long long ll; const int N = 1e5 + 5; const int INF = 0x3f3f

Codeforces Round #335 (Div. 2) D. Lazy Student 贪心

D. Lazy Student Student Vladislav came to his programming exam completely unprepared as usual. He got a question about some strange algorithm on a graph — something that will definitely never be useful in real life. He asked a girl sitting next to hi

Codeforces Round #279 (Div. 2) ABCD

Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name     A Team Olympiad standard input/output 1 s, 256 MB  x2377 B Queue standard input/output 2 s, 256 MB  x1250 C Hacking Cypher standard input/output 1 s, 256 MB  x740 D Chocolate standard input/

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i

Codeforces Round #424 (Div. 2) D. Office Keys(dp)

题目链接:Codeforces Round #424 (Div. 2) D. Office Keys 题意: 在一条轴上有n个人,和m个钥匙,门在s位置. 现在每个人走单位距离需要单位时间. 每个钥匙只能被一个人拿. 求全部的人拿到钥匙并且走到门的最短时间. 题解: 显然没有交叉的情况,因为如果交叉的话可能不是最优解. 然后考虑dp[i][j]表示第i个人拿了第j把钥匙,然后 dp[i][j]=max(val(i,j),min(dp[i-1][i-1~j]))   val(i,j)表示第i个人拿

Codeforces Round #424 (Div. 2) C. Jury Marks(乱搞)

题目链接:Codeforces Round #424 (Div. 2) C. Jury Marks 题意: 给你一个有n个数序列,现在让你确定一个x,使得x通过挨着加这个序列的每一个数能出现所有给出的k个数. 问合法的x有多少个.题目保证这k个数完全不同. 题解: 显然,要将这n个数求一下前缀和,并且排一下序,这样,能出现的数就可以表示为x+a,x+b,x+c了. 这里 x+a,x+b,x+c是递增的.这里我把这个序列叫做A序列 然后对于给出的k个数,我们也排一下序,这里我把它叫做B序列,如果我

[Codeforces] Round #352 (Div. 2)

人生不止眼前的狗血,还有远方的狗带 A题B题一如既往的丝帛题 A题题意:询问按照12345678910111213...的顺序排列下去第n(n<=10^3)个数是多少 题解:打表,输出 1 #include<bits/stdc++.h> 2 using namespace std; 3 int dig[10],A[1005]; 4 int main(){ 5 int aa=0; 6 for(int i=1;;i++){ 7 int x=i,dd=0; 8 while(x)dig[++dd

Codeforces Round #273 (Div. 2)

Codeforces Round #273 (Div. 2) 题目链接 A:签到,仅仅要推断总和是不是5的倍数就可以,注意推断0的情况 B:最大值的情况是每一个集合先放1个,剩下都丢到一个集合去,最小值是尽量平均去分 C:假如3种球从小到大是a, b, c,那么假设(a + b) 2 <= c这个比較明显答案就是a + b了.由于c肯定要剩余了,假设(a + b)2 > c的话,就肯定能构造出最优的(a + b + c) / 3,由于肯定能够先拿a和b去消除c,而且控制a和b成2倍关系或者消除