1. 程式人生 > 實用技巧 >Ajax請求傳遞data資料三種格式:

Ajax請求傳遞data資料三種格式:

題目描述

時限: 0.5s 記憶體: 2M

衡中活動很多,人也很多,一次活動有 n 個學生參與投票,現已知一名參賽選手票數超過半數,求其參賽號 a_i (參賽號隨機, 0\le a_i \le 2147483647 ) 。

輸入格式

  • 第一行一個整數 n
  • 第二行 n 個整數 N_i
    代表第 i 個學生所投選手的參賽號。

輸出格式

超過半數選手的參賽號。

樣例

樣例輸入

10
5 1 2 5 5 2 3 5 5 5

樣例輸出

5

資料範圍與提示

100\% 的資料滿足: n ≤3000000

題解

  • 陣列,肯定不行,直接炸,只能通過其他方法求解。
  • 那麼只能用思維來做了,我用的方法是隻求已知數列中的半數,
  • 如果前面的數和他不同,那麼就cnt--,直到為0時他肯定沒超過半數,就相當於抵消了,
  • 如果前面的數與他相同,那麼cnt++,計算個數,
  • 如果cnt==0,那麼說明此時前面沒有超過半數的數字,
  • 最後出來的就是超過半數的數字。

code

#include <cstdio>
int ans, cnt, x, y;
int main() {
    scanf("%d", &x);
    while (x--) {
        scanf("%d", &y);
        if (cnt == 0)
            ans = y, cnt++;
        else if (ans == y)
            cnt++;
        else
            cnt--;
    }
    printf("%d", ans);
}