题目传送门
 
Ignatius and the Princess IV
 
题目大意
 
给你一个长度为n的数组,求其中出现了
    
     
      
       
        (
       
       
        n
       
       
        +
       
       
        1
       
       
        )
       
       
        /
       
       
        2
       
      
      
       (n+1)/2
      
     
    (n+1)/2次的数字
 
思路
 
因为数字出现了
    
     
      
       
        (
       
       
        n
       
       
        +
       
       
        1
       
       
        )
       
       
        /
       
       
        2
       
      
      
       (n+1)/2
      
     
    (n+1)/2,所以我们可以直接用个res标记与目前假设的数字相同的个数,因为其占比超过一半,所以最后假设的数字必定为答案
 
AC Code
 
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std
;
#define endl '\n'
#define INF 0x3f3f3f3f
#define int long long
#define debug(a) cout<<#a<<"="<<a<<endl;
const int N
=1e7 +9;
int n
;
int a
[N
];
void solve(){
    while(cin
>>n
){
        int flag
, res
;
        res
=flag
=0;
        for(int i
=1; i
<=n
; i
++){
            cin
>>a
[i
];
            if(res
<=0) flag
=a
[i
];
            if(a
[i
]==flag
)  res
++;
            else            res
--;
        }
        cout
<<flag
<<endl
;
    }
    return ;
}
signed main(){
    solve();
    return 0;
}