bzoj2456: mode

Hanks_o發表於2017-10-27

題目傳送門
這道題真的噁心。跟我理解的眾數完全不一樣。。導致我完全忽略了出現次數大於n/2這個條件。。

解法:
以為很水打了個程式碼交上去0msTLE真的舒服。
看了看討論原來這個是MLE。
那就是不能開陣列咯。。
不會啊(忽略了次數大於一半)
然後上網%題解。
發現哦原來還有這個條件。
那眾數和不是眾數的相互抵消。

程式碼實現:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int main() {
    int n;scanf("%d",&n);
    int now=0;int s=0;
    for(int i=1;i<=n;i++) {
        int x;scanf("%d",&x);
        if(now==x)
            s++;
        else if(s==0) {
            now=x;s=1;
        }
        else 
            s--;
    }
    printf("%d\n",now);
    return 0;
}