ことさら−古都プログラマーの更級日記

京都でお寺を回りながら御朱印集めをしていたエンジニアのブログ。おもに技術的なはなしとか日常的なはなし

yukicoder No.216 FAC でハマる

はじめに

  • 問題: http://yukicoder.me/problems/550
  • 言語はC++

  • 23時ごろ、帰ってきてA問題を見る(コンテスト終了時刻は23:20)。

  • A問題は解けそうだからこれだけ解こー
  • まさかのハマり、時間内に答えられず

通らなかったコード

#define int(n) int n; cin >> n;

int main(int argc, const char * argv[]){
    int n, a[100], b[100];
    cin >> n;
    REP(i,n) cin >> a[i];
    REP(i,n) cin >> b[i];
    
    int score[101];
    REP(i,n+1) score[i] = 0;
    
    REP(i,n) score[b[i]] += a[i];
        
    for(int i = 1; i <= n; i++){
        if(score[0] < score[i]){
            cout << "NO" << endl;
            return 0;
        }
    }
    cout << "YES" << endl;
}

なぜハマったのか

ユーザーが5人だったら、ユーザー番号は1〜5だと思い込んでいた!(実際は違った)

通ったコード

#define int(n) int n; cin >> n;

int main(int argc, const char * argv[]){
    int n, a[100], b[100];
    cin >> n;
    REP(i,n) cin >> a[i];
    REP(i,n) cin >> b[i];
    
    int score[101];
    REP(i,101) score[i] = 0;
    
    REP(i,n) score[b[i]] += a[i];
        
    for(int i = 1; i < 101; i++){
        if(score[0] < score[i]){
            cout << "NO" << endl;
            return 0;
        }
    }
    cout << "YES" << endl;
}