题目意思
有m个人参加比赛,现在有n道题,每道题有ai个正确答案,bi个错误答案,现在每道题每个人选择一个选项,选对得一分,分数高获胜。现在问你赢家的最小分数是多少
解题思路
其实我也不知道啥解题思路,比赛时体面更改了两次,开始时不太理解,后来改过体面就懵懵懂懂,也不知道就A了。。。。
其实它给出每道题的正确选项个数个错误选项个数,就相当给了你选择正确答案的概率。先对b进行排序,然后只要每次使当前全对的人数*(1/(bi+1))即可,当没法除的时候就结束。
代码部分
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
int x,y,c;
}a[110];
int cmp(node a,node b)
{
return a.c<b.c;
}
int main()
{
int t,n,m,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0; i<n; i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
a[i].c=a[i].y+1;
}
sort(a,a+n,cmp);
ans=0;
for(int i=0; i<n; i++)
{
if(m>a[i].y)
{
ans++;
m/=a[i].c;
}
else
{
break;
}
}
printf("%d\n",ans);
}
return 0;
}