読者です 読者をやめる 読者になる 読者になる

KUPC2016

http://kupc2016.contest.atcoder.jp/
 最初の二時間くらいは真面目にやってたんだけど解けなすぎて放置してた。
A
 ソートする。
B
ヒープを使って数字の大きい順に処理すればいい。
 ところが結局この問題通せなかった。
 なんか無限ループしてなんやねんと思ったら

for(int i : _in(26))
  if(box[i] > 0) 
    que.emplace(box[i]);

と書くべきところでN回ループして、ヒープに謎の値(たぶんでかい)が入っていたっぽい。
これ範囲外参照で落ちないの普通につらすぎる。
コンパイルオプションなどでなんらかの対策を講じる必要がある気がする。
というか気付けやという話ではあるんだが。

#include <bits/stdc++.h>
using namespace std;

using i64 = long long;
const int INF = 1e9;
int main() {
    cin.tie(0); ios::sync_with_stdio(false);
    int N, K; cin >> N >> K;

    vector<int> box(26, 0);
    for(int i : _in(N)) {
        string s;
        cin >> s;
        int k = (int)(s[0] - 'A');
        box[k]++;
    }
    priority_queue<int> que;
    for(int i : _in(26)) {
        if(box[i] > 0) {
            que.emplace(box[i]);
        }
    }
    int sum = 0;
    vector<int> tmp;
    while((int)que.size() >= K) {
        tmp.clear();
        for(int i : _in(K)) {
            tmp.emplace_back(que.top());
            que.pop();
        }
        for(int i : _in(K)) {
            int x = tmp[i] - 1;
            if(x > 0) que.emplace(x);
        }
        ++sum;
    }
    cout << sum << endl;
    return 0;
}

C
 結局127をたくさんつくりたくない?ということで解ける。
 簡単だけど、面白いと思う。
 簡単だけど面白い枠は僕のような弱者にとっては貴重なので、ありがたい。

#include <bits/stdc++.h>
using namespace std;

using i64 = long long;
const int INF = 1e9;
int main() {
    cin.tie(0); ios::sync_with_stdio(false);
    int T; cin >> T;
    for(int _ : _in(T)) {
        int n, d;
        cin >> n >> d;
        if(n % 2) {
            int ans = 127 * (n - 1) + d;
            cout << ans << '\n';
        }
        else {
            int ans = 127 * (n - 1) + (d ^ 127);
            cout << ans << '\n';
        }
    }
    return 0;
}

D以降は解けず。