# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1105573 | Zicrus | 메시지 (IOI24_message) | C++17 | 1287 ms | 1136 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "message.h"
using namespace std;
typedef long long ll;
void send_message(vector<bool> M, vector<bool> C) {
vector<ll> ids;
vector<vector<ll>> cBits(16);
for (int i = 0; i < 31; i++) {
if (C[i] == 0) ids.push_back(i);
}
for (int i = 0; i < 16; i++) {
while (cBits[i].empty() || cBits[i].back() == 0) {
cBits[i].push_back(!C[(ids[i] + cBits[i].size() + 1) % 31]);
}
}
ll k = 0;
M.push_back(1);
while (M.size() < 1025) M.push_back(0);
for (int i = 0; i < 16; i++) {
while (cBits[i].size() < 66) cBits[i].push_back(M[k++]);
}
vector<bool> a(31);
for (int p = 0; p < 66; p++) {
for (int i = 0; i < 16; i++) {
a[ids[i]] = cBits[i][p];
}
send_packet(a);
}
}
map<ll, ll> bgn;
set<ll> isFirst(vector<vector<bool>> R, ll first) {
bgn.clear();
ll cur = first;
set<ll> vst;
for (int i = 0; i < 16; i++) {
ll nw = cur+1;
while (nw < 100 && nw-cur-1 < R.size() && R[nw-cur-1][cur % 31] == 0) nw++;
if (vst.count(nw%31))
return {};
bgn[cur] = nw-cur;
vst.insert(nw%31);
cur = nw;
}
return cur == first + 31 ? vst : set<ll>();
}
vector<bool> receive_message(vector<vector<bool>> R) {
ll first = 0;
while (isFirst(R, first).empty()) first++;
set<ll> ids = isFirst(R, first);
vector<bool> res;
for (auto &e : ids) {
ll p = bgn[e];
while (p < 66) res.push_back(R[p++][e]);
}
while (res.back() == 0) res.pop_back();
res.pop_back();
return res;
}
#ifdef TEST
#include "grader.cpp"
#endif
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |