F

F - Capture

题链

题意

给你两种颜色的物品,有n组,每组有第一种颜色有w个,第二种为d个,每组必须选一种,求最后第一种颜色占的比值不低于K的最少需要选第一种的组数。

思路

首先没组都选第一种的话比值为100,(sum = sum_1^nwi)
那么我们只要求最多可以选多少个第二种,使得(frac{sum - a}{sum - a + b} >= k(a = sum_1^swi,b=sum_1^sbi)),可以化简为$$(1-k)sum>=kb + (1-k)a$$
这样问题就解决了。

代码

// Last Update:2017-11-30 22:18:48
// author:sjy
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL w[100005],d[100005];
LL c[100005];
int main(void)
{
    int n,p;
    while(scanf("%d %d",&n,&p)!=EOF)
    {  LL sum = 0;
       for(int i = 0;i < n;i++)
           scanf("%lld %lld",&w[i],&d[i]),sum += w[i];
       LL k = p,kk = 100-p;
       sum = kk*sum;
       for(int i = 0;i < n;i++)
           c[i] = k*d[i] + kk*w[i];
       sort(c,c+n);
       int m = 0;
       for(int i = 0;i < n;i++)
       {
         if(sum >= c[i])
             sum -= c[i],m++;
         else break;
       }
       printf("%d
",n - m);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zzuli2sjy/p/7932414.html