猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

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;
}