結果

問題 No.5004 Room Assignment
ユーザー 👑 NachiaNachia
提出日時 2021-12-01 00:44:35
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
AC  
実行時間 127 ms / 5,000 ms
コード長 2,063 bytes
コンパイル時間 606 ms
実行使用メモリ 22,368 KB
スコア 129,518,995
平均クエリ数 7645.54
最終ジャッジ日時 2021-12-01 00:44:55
合計ジャッジ時間 16,099 ms
ジャッジサーバーID
(参考情報)
judge10 / judge11
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 100
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using i32 = int32_t;
using u32 = uint32_t;
using i64 = int64_t;
using u64 = uint64_t;
#define rep(i,n) for(int i=0; i<(n); i++)



//vector<int> block_separator = {
//    0, 10, 20, 30, 47, 56, 64, 81, 91, 101
//};

vector<int> block_separator = {
//    0, 11, 22, 32, 48, 55, 62, 79, 90, 101
//    0, 11, 22, 32, 43, 50, 57, 62, 79, 90, 101
//    0, 15, 26, 35, 44, 50, 57, 66, 75, 86, 101
//    0, 15, 26, 35, 41, 46, 50, 55, 60, 57, 66, 75, 86, 101
    0, 16, 27, 35, 41, 46, 50, 55, 60, 57, 66, 74, 85, 101
};



int main(){
    int num_block = block_separator.size() - 1;
    vector<int> block_size(num_block, 0);
    vector<int> block_id(num_block, -1);

    int num_tick; cin >> num_tick;
    int max_block_size; cin >> max_block_size;

    int next_player_id = 1;

    rep(tick_idx, num_tick){
        int num_enter; cin >> num_enter;
        vector<pair<int,int>> buf;

        rep(enter_idx, num_enter){
            int enter_id = next_player_id++;
            int player_skill; cin >> player_skill;
            int block_to_assign = upper_bound(block_separator.begin(), block_separator.end(), player_skill) - block_separator.begin() - 1;

            if(block_size[block_to_assign] == 0){
                block_id[block_to_assign] = enter_id;
                block_size[block_to_assign]++;
            }
            else{
                buf.push_back(make_pair(block_id[block_to_assign], enter_id));
                block_size[block_to_assign]++;
            }

            if(block_size[block_to_assign] >= max_block_size){
                block_id[block_to_assign] = -1;
                block_size[block_to_assign] = 0;
            }
        }

        cout << buf.size() << "\n";
        for(auto a : buf){
            cout << a.first << " " << a.second << "\n";
        }
        cout << flush;
    }
    return 0;
}




struct ios_do_not_sync {
    ios_do_not_sync() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    }
} ios_do_not_sync_instance;
0