結果
問題 | No.600 かい文回 |
ユーザー |
|
提出日時 | 2017-11-30 21:28:58 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,692 bytes |
コンパイル時間 | 2,073 ms |
コンパイル使用メモリ | 183,380 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-27 15:20:34 |
合計ジャッジ時間 | 2,738 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 21 |
ソースコード
#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>#include <ext/pb_ds/tree_policy.hpp>using namespace std;using namespace __gnu_pbds;#define fi first#define se second#define mp make_pair#define pb push_back#define fbo find_by_order#define ook order_of_keytypedef long long ll;typedef pair<ll,ll> ii;typedef vector<int> vi;typedef long double ld;typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds;typedef set<ll>::iterator sit;typedef map<ll,ll>::iterator mit;void solve(ll n, int cnt = 0){ll k=0;while((1LL<<k)<=n) k++;k--;if(n==1){for(int i=0;i<cnt;i++) cout<<char('d'+i);cout<<"abc"<<'\n';for(int i=cnt-1;i>=0;i--) cout<<char('d'+i);exit(0);}if((1LL<<k)==n){for(int i=0;i<cnt;i++) cout<<char('d'+i);for(int i=0;i<k;i++){cout<<"aa";}for(int i=cnt-1;i>=0;i--) cout<<char('d'+i);cout<<'\n';exit(0);}vi vec;n-=(1LL<<k); n--;//x_1 = 1, x_n = k - 1for(int i=0;i<30;i++){if(n&(1<<i)){vec.pb(i);}}vec.pb(k-1);bool pos=1;for(int i=0;i+1<vec.size();i++){if(vec[i]>vec[i+1]){pos=0; break;}}if(!pos) solve(n-1,cnt+1);for(int i=0;i<cnt;i++) cout<<char('d'+i);vi nw;nw.pb(1);nw.pb(vec[0]+1);for(int i=1;i<vec.size();i++){nw.pb(vec[i]-vec[i-1]+1);}for(int i=0;i<nw.size();i++){for(int j=0;j<nw[i];j++){cout<<char('a'+i%3);}}for(int i=int(nw.size())-1;i>=0;i--){for(int j=0;j<nw[i];j++){cout<<char('a'+i%3);}}for(int i=cnt-1;i>=0;i--) cout<<char('d'+i);cout<<'\n'; exit(0);}int main(){ios_base::sync_with_stdio(0); cin.tie(0);ll n; cin>>n; solve(n);}