課題 1.5 情報オリンピック予選問題(2013年度第13回JOI予選問題2)

<問題>

<入力>

<出力>

<入出力例>

入力例1

入力例2

4 3
5
3
1
4
4
3
2

6 6
3
1
4
1
5
9
2
6
5
3
5
9

出力例1

出力例2

2

1


(回答を表示) (制限時間は60分)

解答例 (制限時間は60分)

#include <stdio.h>

int main(void) {
    int N,M;
    int A[1000], Bj;
    int C[1000];  /* 獲得票数 */
    int i, j;
    int maxi, maxp;

    scanf("%d %d", &N, &M); /* 競技数、審査員数 */

    /* 配列Aにランク順に各競技の費用。配列Cの初期化も同時に */
    for (i = 0; i < N; i++) {
        scanf("%d", &A[i]);
        C[i]=0;
    }


    /* 審査員の判定情報を読み込む。この値を超えない競技に1票 */
    for (j = 0; j < M; j++){
        scanf("%d", &Bj);
        for (i = 0; i < N; i++) { /* 各競技のランク順 A[0]から順にチェック */
            if (A[i] <= Bj) { /* Bjを超えていない競技A[i] */
                C[i]++; /* 1票入れて、ループを抜ける */
                break;
            }
        }
    }

    maxi = 0;  /* 暫定一位の競技。配列の添え字 */
    maxp = C[0]; /* 暫定一位の得票数 */

    /* 最大得票数の競技番号、配列の添え字を求める */
    for (i = 1; i < N; i++) {
        if (maxp < C[i]) {
            maxi = i;
            maxp = C[i];
        }
    }

    /* 配列の先頭は0から。競技は1種目からなので、出力調整 */
    printf("%d\n", maxi+1);

    return 0;
}