hdu 1029 B

来源:互联网 发布:大数据提供价格 编辑:程序博客网 时间:2024/05/16 18:18

题目链接

大体题意就是让你输出奇数个数的数列中出现次数大于 n/2的那个

       我记得类似的题目啊哈的最后出现过,我们肯定首先想到的就是排序然后输出中间那个,但是这样的复杂度是快排为nlogn,那么我们有没有线性的方法呢?

有一个比较好的方法就是 我们可以利用该数出现n/2 的性质,那么我们每次删除数组中的两个数,一直删到最后留下的就一定是那个出现次数超过n/2的那个

#include<bits/stdc++.h>#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 100000007using namespace std;typedef long long ll;const int maxn=1e7+10;int n,x;int main(){while(~Ri(n)){Ri(x);int cnt=1,item=x;for(int i=1;i<n;i++){Ri(x);if(cnt==0){item=x;cnt=1;}if(x==item)cnt++;elsecnt--;}Pi(item);}return 0;}

1 0
原创粉丝点击