結果

問題 No.3562 Communicate Sorted Vector
コンテスト
ユーザー GOTKAKO
提出日時 2026-05-30 01:13:10
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 110 ms / 2,000 ms
コード長 2,061 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,484 ms
コンパイル使用メモリ 221,564 KB
実行使用メモリ 30,320 KB
平均クエリ数 3.00
最終ジャッジ日時 2026-05-30 01:13:35
合計ジャッジ時間 19,958 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge2_0
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点1 10 % AC * 45
部分点2 25 % AC * 45
部分点3 65 % AC * 46
合計 100 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
 
    string s; cin >> s;
    if(s.at(0) == 'A'){
        int N,Q; cin >> N >> Q;
        vector<int> A(N);
        for(auto &a : A) cin >> a;
        for(int i=0; i<N; i++) A.at(i) -= i+1;
        A.insert(A.begin(),0);
        int sum = 0,low = 1001001001;
        vector<string> S(N);
        for(int i=1; i<=N; i++){
            int d = A.at(i)-A.at(i-1);
            low = min(low,d);
            string s = "";
            while(d) s += d%2+'0',d /= 2;
            reverse(s.begin(),s.end());
            if(s.size() == 0) s = '0';
            S.at(i-1) = s,sum += s.size();
        }
        if(sum > Q) for(int i=1,first=1; i<=N; i++){
            if(i == 1) sum = 0;
            int d = A.at(i)-A.at(i-1);
            if(d == low && first){
                first = 0;
                string s = "";
                while(d) s += d%2+'0',d /= 2;
                reverse(s.begin(),s.end());
                if(s.size() == 0) s = '0';
                s.insert(s.begin(),'0');
                S.at(i-1) = s,sum += s.size();
            }
            else{
                d -= low;
                string s = "";
                while(d) s += d%2+'0',d /= 2;
                reverse(s.begin(),s.end());
                if(s.size() == 0) s = '0';
                S.at(i-1) = s,sum += s.size();
            }
        }
        assert(sum <= Q);
        cout << S.size() << "\n";
        for(auto s : S) cout << s << "\n";
    }
    else{
        int N,Q,K; cin >> N >> Q >> K;
        vector<string> S(K);
        int low = 1;
        for(auto &s : S) cin >> s;
        vector<int> A(N);
        int now = 0;
        for(int i=0; i<N; i++){
            int d = 0;
            for(auto c : S.at(i)) d *= 2,d += c=='1';
            if(S.at(i).at(0) == '0' && S.at(i).size() > 1) low = d+1,A.at(i) = now;
            else now += d,A.at(i) = now;
        }
        for(int i=0; i<N; i++) cout << A.at(i)+low*(i+1) << (i+1==N?"\n":" ");
    }
}
0