結果
| 問題 | No.3562 Communicate Sorted Vector |
| コンテスト | |
| ユーザー |
jastaway
|
| 提出日時 | 2026-05-21 13:49:02 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,048 bytes |
| 記録 | |
| コンパイル時間 | 2,610 ms |
| コンパイル使用メモリ | 352,704 KB |
| 実行使用メモリ | 57,792 KB |
| 最終ジャッジ日時 | 2026-05-29 18:32:31 |
| 合計ジャッジ時間 | 9,622 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | TLE * 1 -- * 44 |
| 部分点2 | 25 % | -- * 45 |
| 部分点3 | 65 % | -- * 46 |
| 合計 | 0 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
const string one(29, '1');
string to_str(int num)
{
if(num == 1) return one;
string ret = "";
while(num)
{
ret.push_back('0' + (num&1));
num >>= 1;
}
ret.pop_back();
reverse(ret.begin(), ret.end());
return ret;
}
int to_num(const string& s)
{
if(s == one) return 1;
int ret = 1;
for(char c : s)
{
ret <<= 1;
ret += c - '0';
}
return ret;
}
vector<int> get_permutation_at(int N, int k) {
vector<int> res(N);
iota(res.begin(), res.end(), 1);
k--;
for(int i = 0; i < k; i++) next_permutation(res.begin(), res.end());
return res;
}
int get_permutation_index(vector<int> p)
{
int res = 0;
do
{
res++;
} while (prev_permutation(p.begin(), p.end()));
return res;
}
void Alice()
{
int N, Q; cin >> N >> Q;
vector<int> A(N);
for(auto& a : A) cin >> a;
vector<string> S(min(N, 13));
for(int i = 0; i < min(N, 13); i++)
{
S[i] = to_str(A[i]);
}
if(N == 14)
{
auto perm = get_permutation_at(N-1, A[N-1]);
vector<string> nS(N-1);
for(int i = 0; i < N-1; i++) nS[i] = S[perm[i]-1];
S.swap(nS);
}
cout << S.size() << endl;
for(auto& s : S) cout << s << endl;
return;
}
void Bob()
{
int N, Q; cin >> N >> Q;
int K; cin >> K;
vector<string> S(K);
for(auto& s : S) cin >> s;
vector<int> A(N);
for(int i = 0; i < min(N, 13); i++) A[i] = to_num(S[i]);
if(N == 14)
{
vector<int> I(K), perm(K);
iota(I.begin(), I.end(), 0);
sort(I.begin(), I.end(), [&](int i, int j){ return A[i] < A[j]; });
for(int i = 0; i < K; i++) perm[I[i]] = i + 1;
A[N-1] = get_permutation_index(perm);
}
sort(A.begin(), A.end());
for(int i = 0; i < N; i++) cout << A[i] << (i < N-1 ? " " : "\n");
cout << flush;
return;
}
int main()
{
string player; cin >> player;
if(player == "Alice") Alice();
else Bob();
}
jastaway