結果
問題 | No.1061 素敵な数列 |
ユーザー | 増井舜 |
提出日時 | 2020-06-27 18:07:12 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 40 ms / 2,000 ms |
コード長 | 5,133 bytes |
コンパイル時間 | 2,115 ms |
コンパイル使用メモリ | 187,520 KB |
実行使用メモリ | 12,180 KB |
最終ジャッジ日時 | 2024-07-05 18:35:31 |
合計ジャッジ時間 | 5,713 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 2 ms
5,376 KB |
testcase_13 | AC | 3 ms
5,376 KB |
testcase_14 | AC | 1 ms
5,376 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | AC | 2 ms
5,376 KB |
testcase_17 | AC | 2 ms
5,376 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 11 ms
5,468 KB |
testcase_20 | AC | 9 ms
5,376 KB |
testcase_21 | AC | 19 ms
7,352 KB |
testcase_22 | AC | 36 ms
11,440 KB |
testcase_23 | AC | 29 ms
9,456 KB |
testcase_24 | AC | 29 ms
9,740 KB |
testcase_25 | AC | 27 ms
9,448 KB |
testcase_26 | AC | 7 ms
5,376 KB |
testcase_27 | AC | 17 ms
6,936 KB |
testcase_28 | AC | 19 ms
7,312 KB |
testcase_29 | AC | 26 ms
9,008 KB |
testcase_30 | AC | 32 ms
10,420 KB |
testcase_31 | AC | 17 ms
7,264 KB |
testcase_32 | AC | 40 ms
12,180 KB |
testcase_33 | AC | 7 ms
5,376 KB |
testcase_34 | AC | 10 ms
5,376 KB |
testcase_35 | AC | 9 ms
5,376 KB |
ソースコード
#include "bits/stdc++.h" #include<vector> #include<iostream> #include<queue> #include<algorithm> #include<map> #include<set> #include<iomanip> #include<assert.h> #include<unordered_map> #include<unordered_set> #include<string> #include<stack> #include<complex> #include<memory> #pragma warning(disable:4996) using namespace std; using ld = long double; template<class T> using Table = vector<vector<T>>; const ld eps=1e-9; using Graph=vector<vector<int>>; using ll=long long; #define WHATS(var)cout<<__LINE__<<' '<<#var<<"="<<var<<endl; template<class S, class T> ostream& operator <<(ostream &os, const pair<S, T> v){ os << "( " << v.first << ", " << v.second << ")"; return os; } template<class T> ostream& operator <<(ostream &os, const vector<T> &v){ for(int i = 0; i < v.size(); i++){if(i > 0){os << " ";} os << v[i];} return os; } template<class T> ostream& operator <<(ostream &os, const vector<vector<T>> &v){ for(int i = 0; i < v.size(); i++){if(i > 0){os << endl;} os << v[i];} return os; } template<class T> ostream& operator <<(ostream &os, const vector<set<T>> &v){ for(int i = 0; i < v.size(); i++){if(i > 0){os << endl;} os << v[i];} return os; } template<class T> ostream& operator <<(ostream &os, const set<T> &v){ int i=0; for(auto it:v){ if(i > 0){os << ' ';} os << it; i++; } return os; } // vector<vector<string>>sts(6,vector<string>(2)); void cc(vector<int>v){ int k=v.size()/3; vector<vector<int>>nums(k); for(int i=0;i<v.size();++i){ nums[v[i]].push_back(i); } //WHATS(st) for(int i=0;i<k;++i){ assert(nums[i].size()==3); // WHATS(nums) assert(i==abs((nums[i][2]-nums[i][1])-(nums[i][1]-nums[i][0]))); } } void cc(string st){ int k=st.size()/3; vector<vector<int>>nums(k); for(int i=0;i<st.size();++i){ if(st[i]!='?')nums[st[i]-'0'].push_back(i); } //WHATS(st) for(int i=0;i<k;++i){ assert(nums[i].size()==3); // WHATS(nums) assert(i==abs((nums[i][2]-nums[i][1])-(nums[i][1]-nums[i][0]))); } } int main() { ios::sync_with_stdio(false); cin.tie(); sts[0][0]="000"; sts[1][1]="01010?1"; sts[2][0]="202101201"; sts[2][1]="22102101?0"; sts[3][0]="332203201101"; sts[3][1]="33221321010?0"; sts[4][0]="244223341131000"; sts[4][1]="34423324000211?1"; sts[5][0]="355443235421211000"; sts[5][1]="35544313541221020?0"; for(int i=2;i<=5;++i){ cc(sts[i][0]); cc(sts[i][1]); } int N;cin>>N; N--; vector<pair<pair<int,int>,int>>ps; int now=N; if(N==1){ cout<<-1<<endl; return 0; } bool flag=false; while(now>=6){ if(now%2==0){ ps.push_back(make_pair(make_pair(now,now/2),0)); }else{ ps.push_back(make_pair(make_pair(now,now/2),1)); flag=!flag; } now=now/2-1; } ps.push_back(make_pair(make_pair(now,0),flag)); vector<vector<int>>vs(ps.size()); for(auto p:ps){ vector<int>v; if(p.first.first<=5){ for(auto c:sts[p.first.first][p.second]){ if(c=='?')v.push_back(-1); else v.push_back(c-'0'); } }else{ if(p.first.first%2==1){ int aa=0; for(int x=p.first.first;x>p.first.second;--x){ v.push_back(x); v.push_back(x); } v.push_back(p.first.second); for(int x=p.first.first;x>p.first.second;--x){ v.push_back(x); } v.push_back(p.first.second); v.push_back(-1); v.push_back(p.first.second); }else{ for(int x=p.first.first;x>=p.first.second;--x){ v.push_back(x); v.push_back(x); } for(int x=p.first.first;x>=p.first.second;--x){ v.push_back(x); } } } //WHATS(v) vs.push_back(v); } vector<int>anss; flag=false; for(int i=0;i<vs.size();++i){ auto v=vs[i]; if(find(v.begin(),v.end(),-1)!=v.end()){ if(!flag){ for(auto x:v){ anss.push_back(x); } }else{ int k=anss.back(); anss.pop_back(); anss.pop_back(); reverse(v.begin(),v.end()); for(int i=0;i<v.size();++i){ if(i==1)anss.push_back(k); else anss.push_back(v[i]); } } flag=!flag; } } for(int i=0;i<vs.size();++i){ auto v=vs[i]; if(find(v.begin(),v.end(),-1)==v.end()){ for(auto x:v){ anss.push_back(x); } } } //WHATS(anss) for(int i=0;i<anss.size();++i){ cout<<anss[i]; if(i==anss.size())cout<<endl; else cout<<' '; } cc(anss); return 0; }