您的位置:首页 > 其它

AOJ-AHU-OJ-676 投票

2014-03-28 17:47 351 查看
投票

Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB

Description

在森林的烹饪比赛中共有Oldbear和其它动物共n名选手参与, Oldbear参赛的编号是1, 其它动物的编号是2~n.

森林的每个动物(除了参赛队员)都会选择自己喜欢的一个参赛选手(只能选一个)并给他投票, 投票结果是公开的, 所有参赛选手的票数都是已知的, 他想确定的是, 他是不是绝对的第一名(没有人的票数和他一样或者超过他). 如果不是的话, Oldbear打算策反一些给其它参赛选手的投票的动物转投给自己, Oldbear想知道他最少需要策反多少动物给自己投票.

策反:A有30票,B有1票,B策反A的一票之后,B有2票,A有29票。

同一个动物可以被策反多票。

Input

单组测试数据

第1行: 一个数n(2 <= n <= 200), n的含义如描述所述

第2行: n个用空格隔开的正整数, 其中第i个数表示编号为i的选手的票数, 其中各票数的取值区间为(0, 200];

Output

输出结果只有一行.

如果Oldbear已经是绝对的第一名, 请输出"Oldbear, The best!"(不用输出双引号), 否则请输出Oldbear最少需要策反的动物数.

Sample Input
OriginalTransformed
3
1 3 3


Sample Output
OriginalTransformed
2


——————————————————忧桑的分割线——————————————————

思路:真的是状态不好。该水题本以为能秒,结果活活WA了6、7次,之后再没有心情看别的题目了。悲哀!悲哀!

后来,原来第一次Submit的代码,只错了一个地方:

Error:qsort(piao, n, sizeof(piao), cmp);
知道错哪了吗?快排模板不是这样的!sizeof()你一定要小心!它并不是函数,而是一个运算符。

在编译的时候sizeof就起了作用,而且它是一个很复杂的运算符,初学者不要不明所以就使用。参见百度百科:

点击打开链接

除此之外还有一个用了sizeof()而且很神奇的地方

memset(vis, 0, sizeof(vis));
总之快排模板千万别再记错。参见博客:

点击打开链接

代码如下:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int piao[210];
int cmp(const void *a, const void *b){
return *(int *)b - *(int *)a;
}
int main() {
int n, i;
scanf("%d", &n);
n--;
int bear;
scanf("%d", &bear);
int ans = bear;
for(i = 0; i < n; i++)
scanf("%d", piao+i);//注意,数组中保存的是Oldbear之外的动物
qsort(piao, n, sizeof(piao[0]), cmp);
if(bear > piao[0])
puts("Oldbear, The best!");
else{
for(;;){//这是一个思维复杂度很低的方法,但是数据范围大了就不理想了
if(piao[0] >= bear){
bear++;
piao[0]--;
qsort(piao, n, sizeof(piao[0]), cmp);//最大值比Oldbear大,策反一票,之后重新排出票最多的动物
}
else break;
}
printf("%d\n", bear - ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: