F - Capture
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;
}