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",n - m);
    }
    return 0;
}

版权声明:本文为zzuli2sjy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/zzuli2sjy/p/7932414.html