0
点赞
收藏
分享

微信扫一扫

hdu—1002

Star英 2022-09-07 阅读 203



光头强选举


Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0



Problem Description



光头强非常渴望权利。他想赢得即将到来的选举。
现在有n个候选人,包括光头强,其中光头强是一号候选人。我们现在已经知道每个候选人获得了多少张选票。其中第i个候选人拥有 ai张选票。为了赢得选举,光头强的得票数必须严格大于其他候选人。
胜利比一切都重要,所以光头强决定通过作弊来赢得选举。他会通过贿赂将给其竞争者投票的选民将选票改投给自己。那么光头强最少要贿赂几个选民才能获得选举的胜利?


Input



≤ n  ≤ 100),表示有n个候选人。
接下来1行有n个数  a1 ,  a2 ,...  an (1  ≤ai≤ 1000)表示每个候选人的票数。


Output



对于每个测试实例,输出最少要贿赂几个人才能使光头强赢得选举(他的得票数严格大于其他所有候选人)



 



Sample Input


4 
1 8 8 8
5
5 1 11 2 8



Sample Output

6
4

Hint


【分析】



没什么好说的...不要想太多就好了,数据范围给了的只有100个人,所以每次找票最多的那个人,从他手里拿一票给自己,直到自己是票数最多的就可以了。



//稍微注意一下题目里说的是严格大于....



【代码】



#include <stdio.h>
using namespace std;
int n;
int a[110];
int main()
{
while (~scanf("%d",&n))
{
int ma=-1;
int now=-1;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>ma)
{
ma=a[i];
now=i;
}
}
int ans=0;
while(now!=0)
{
a[now]--;
a[0]++;
ans++;
ma=-1;
for(int i=0;i<n;i++)
if(a[i]>ma)
{
ma=a[i];
now=i;
}
}
for(int i=1;i<n;i++)
if(a[i]==a[0])
{
ans++;
break;
}
printf("%d\n",ans);
}
return 0;
}



举报

相关推荐

0 条评论