标签:
Problem Description
sample input
题意
地主给排着队的长工发工资,每份工资是一样的,领了工资的人会留下工号,但是有的人对领完之后回到队尾再领,如果有人领的工资比其他所有人只和还多,试求是否有这样的人以及他的编号。
题解
题意也就是寻找序列中出现次数超过一半的元素,可以先排序,然后计算中间位置元素的数量(二分),超过一半就是答案,小于一半则无解
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int a[1002]; int main(void) { //freopen ("in.txt","r",stdin); int n,k; while (scanf("%d",&n)!=EOF) { for (int i=1;i<=n;++i) scanf("%d",&a[i]); sort(a+1,a+1+n); k=a[(1+n)/2]; if (upper_bound(a+1,a+1+n,k)-lower_bound(a+1,a+1+n,k)>n/2) printf("%d\n",k); else printf("-1\n"); } }
标签:
原文地址:http://www.cnblogs.com/123-123/p/5188958.html