【競プロ】1日1AC : ABC151 C問題 Welcome to AtCoder

今日は余力があるので2記事目の更新です。

【競プロ】1日1AC : ABC155 C問題 Poll

2020年6月30日

ここで取り扱う問題はこちら。

提出コードと考え方

ある問題でACが出るまでのWA数を問題ごとにカウントして、ACが出たときにそれを正答数、ペナルティに加えるのが方針です。

ACが出た後は同じ問題でペナルティをもらったり、正答数が増えることはないのでカウンターに特別な値を入れておいて、それ以降は無視するように処理を書きます。

提出コードではmapを使っています。

WAを出さずにACをする場合、存在しないキーを指定することになり大丈夫か、と思うかもしれませんが、実際には型ごとのデフォルトの値をvalueとする要素が追加されます。(数値型なら0です。)

#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for (int i = 0;i < n;i++)

int main() {
    int n, m;
    cin >> n >> m;
    vector<pair<int,string>> sub(m);
    rep(i,m) cin >> sub[i].first >> sub[i].second;

    int ac = 0, pena = 0;
    map<int,int> mp;
    rep(i,m) {
        int p = sub[i].first;
        string s = sub[i].second;
        if(mp[p] == -1) continue;
        if(s == "WA"){
            mp[p]++;
        } else {
            ac++;
            pena += mp[p];
            mp[p] = -1;
        }
    }
    cout << ac << " " << pena << endl;
}

1 個のコメント

  • コメント