頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC141 C - Attack Survival

問題はこちら atcoder.jp

方針

ナイーブに N-1 人の点数をいちいち引くのでは間に合いません。ラウンドで出た正解数は Q と分かっているので,各問の正解者に 1 点ずつ与えて,最後で一律に Q 点を引いても同じことです。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    int n,k,q;
    cin>>n>>k>>q;
 
    vector<int> a(q);
    for(int i=0; i<q; i++){
        cin>>a[i];
    }
 
    vector<int> correct(n); //正解数
    for(int i=0; i<q; i++){
        correct[a[i]-1]++; //ここが1ずれることに注意
    }
 
    for(int i=0; i<n; i++){
        cout<<(k-q+correct[i]>0 ? "Yes" : "No")<<endl;
    }
}