题意:
就是n个人考试,试卷上有m个题,每个题告诉你正确答案s和错误答案t的数量(都>=1),这n个人很团结,选取最优策略,
保证他们当中一定可以有人答对最多S题
思路:
注意:一定 和 最多
每一题答对的可能性为 s/(s+t)。所以s+t个人就可以答对s题
我们只需要用最少的人数答对这一题 那就是t+1个人,一定可以答对1题
所以每道题需要t+1个人才能答对
那么前i个题答对 需要 (t1+1)*(t2+1)*...*(ti+1)个人
所以如果想要更少的人答对更多的题,那么肯定先答 错误答案数量少的,所以把题目按错误数量从小到大排序,
最后只需要判断一下哪一个i会大于人数就行
贡献出了一道题 开心QAQ
#include <cstdio>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <vector>
#include <iostream>
#define ll long long
#define INF 0x3f3f3f
using namespace std;
const int N=1000+100;
long long a[N],b[N];
struct node
{
ll x,y;
}p[N];
bool cmp(node a,node b)
{
return a.y<b.y;
}
int main()
{
int t,n,cnt,i,id;
long long m;
long long ans;
scanf("%d",&t);
while(t--)
{
scanf("%d%lld",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%lld%lld",&p[i].x,&p[i].y);
}
sort(p+1,p+1+n,cmp);
ans=1;
cnt=0;
id=1;
while(1)
{
if(id>n) break;
ans=(ll)ans*(ll)(p[id].y+1);
if(ans>m) break;
cnt++;
id++;
}
printf("%d\n",cnt);
}
return 0;
}