| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1358094 | altern23 | Hidden Sequence (info1cup18_hidden) | C++20 | 3 ms | 436 KiB |
#include<bits/stdc++.h>
#include "grader.h"
using namespace std;
#pragma GCC optimize ("Ofast", "unroll-loops")
#define ll long long
vector <int> findSequence (int N) {
vector <pair<int, int>> res;
res.push_back({-1, 0});
int elem;
for (int i = 0; i < 2; i++) {
vector <int> v;
for (int j = 1; j <= N/2+1; j++) {
v.push_back(i);
if (!isSubsequence(v)) {
v.pop_back();
break;
}
}
if (v.size() != N/2+1) {
elem = i;
for (auto j : v) res.push_back({j, 0});
break;
}
}
ll sum = N-((ll)res.size()-1), cur = res.size();
vector <int> ans;
while (cur) {
if (cur == 1) {
for (int j = 0; j < res.size(); j++) {
if (res[j].second == 0) {
vector <pair<int, int>> nxt;
for (int k = 0; k < j; k++) nxt.push_back(res[k]);
nxt.push_back({res[j].first, 1});
for (int k = 1; k <= sum; k++) nxt.push_back({!elem, -1});
for (int k = j+1; k < (ll)res.size(); k++) nxt.push_back(res[k]);
res.swap(nxt);
break;
}
}
break;
}
ll MN = sum/cur;
// try every index
vector <bool> ch(res.size());
for (int j = 0; j < res.size(); j++) {
if (res[j].second == 0) {
// try if smuanya MN+1
vector <int> tmp;
for (int l = 0; l <= j; l++) {
if (res[l].first == elem) tmp.push_back(res[l].first);
}
for (int l = 1; l <= MN+1; l++) tmp.push_back(!elem);
for (int l = j+1; l < (ll)res.size(); l++) {
if (res[l].first == elem) tmp.push_back(res[l].first);
}
if (!isSubsequence(tmp)) {
ch[j] = 1;
}
}
}
vector <pair<int, int>> nxt;
for (int j = 0; j < res.size(); j++) {
if (ch[j]) {
int sz = 0;
for (int k = 0; k < MN+1; k++) {
vector <int> tmp;
for (int l = 0; l <= j; l++) {
if (res[l].first == elem) tmp.push_back(res[l].first);
}
for (int l = 1; l <= k; l++) tmp.push_back(!elem);
for (int l = j+1; l < (ll)res.size(); l++) {
if (res[l].first == elem) tmp.push_back(res[l].first);
}
if (isSubsequence(tmp)) sz = k;
else break;
}
sum -= sz;
cur--;
nxt.push_back({res[j].first, 1});
for (int k = 1; k <= sz; k++) nxt.push_back({!elem, -1});
}
else {
nxt.push_back(res[j]);
}
}
nxt.swap(res);
}
for (auto i : res) {
if (i.first != -1) ans.push_back(i.first);
}
return ans;
}컴파일 시 표준 에러 (stderr) 메시지
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
