# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
515604 | kshitij_sodani | Present (RMI21_present) | C++14 | 1654 ms | 58764 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
#define endl '\n'
llo pre[61][61];
llo dp[1<<22][23];;
llo cal[1<<22];
llo cal2[1<<22];
llo comp[1<<22];
llo vis[1<<22];
llo vis2[1<<22];
llo vis3[44];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
for(llo i=1;i<=60;i++){
for(llo j=1;j<=60;j++){
pre[i][j]=__gcd(i,j);
}
}
llo zz=0;
llo zz2=0;
llo bb=17;
//for(llo i=1;i<=bb;i++){
llo oo=0;
llo pp=0;
for(llo j=0;j<(1<<(bb));j++){
vector<llo> tt;
llo cur=0;
llo ec=-1;
for(llo i=0;i<bb;i++){
if((1<<i)&j){
ec=(1<<i);
tt.pb(i*2+2);
}
}
if(tt.size()){
cur=cal2[j-ec];
}
for(llo k=0;k+1<tt.size();k++){
cur|=(1<<((pre[tt[k]][tt.back()]/2)-1));
}
cal2[j]=cur;
if((cur|j)==j){
// dp[(1<<bb)-j-1][0]=1;
vis[j]=1;
//oo++;
}
// pp++;
}
// cout<<11<<endl;
llo val5=0;
/*for(llo j=0;j<(1<<bb);j++){
for(llo i=0;i<bb;i++){
}
}*/
for(llo j=0;j<(1<<bb);j++){
vector<llo> tt;
llo cur=0;
llo ec=0;
for(llo i=0;i<bb;i++){
if((1<<i)&j){
ec=(1<<i);
tt.pb(i*2+1);
}
}
if(tt.size()){
cur=cal[j-ec];
}
for(llo k=0;k+1<tt.size();k++){
cur|=(1<<(pre[tt[k]][tt.back()]/2));
}
if((cur|j)==j){
llo su=0;
for(llo i=0;i<bb;i++){
llo st=1;
for(auto k:tt){
if((1<<(pre[k][2*i+2]/2))&j){
}
else{
st=0;
break;
}
}
if(st==1){
su+=(1<<i);
}
}
vis2[j]=1;
comp[j]=su;
//cout<<j<<":"<<su<<endl;
}
cal[j]=cur;
/*if(j>0){
nn[j]+=nn[j-1];
}*/
}
llo t;
cin>>t;
while(t--){
llo n;
cin>>n;
if(n==0){
cout<<0<<endl;
continue;
}
n++;
for(int i=1;i<=2*bb;i++){
vis3[i]=0;
}
for(llo ii=2*bb;ii>=1;ii--){
vis3[ii]=-1;
llo ac=0;
llo bc=0;
for(llo j=2*bb;j>=ii;j-=2){
if(vis3[j]==-1){
ac+=(1<<((j-1)/2));
}
else{
bc+=(1<<((j-1)/2));
}
}
llo ac2=0;
llo bc2=0;
for(llo j=2*bb-1;j>=ii;j-=2){
if(vis3[j]==-1){
ac2+=(1<<(j/2));
}
else{
bc2+=(1<<(j/2));
}
}
llo zz=0;
for(llo j=0;j<(1<<bb);j++){
dp[j][0]=0;
if((j&ac)==0){
if((j|bc)==j){
dp[j][0]=vis[j];
}
}
for(llo i=1;i<=bb;i++){
if((1<<(i-1))&j){
dp[j][i]=dp[j][i-1]+dp[j-(1<<(i-1))][i-1];
}
else{
dp[j][i]=dp[j][i-1];
}
}
}
for(llo j=0;j<(1<<bb);j++){
if(vis2[j]==1){
if((j&ac2)>0){
continue;
}
if((j|bc2)==j){
zz+=dp[comp[j]][bb];
}
}
}
/*if(ii==1){
cout<<zz<<"::"<<endl;
}*/
if(zz<n){
n-=zz;
vis3[ii]=1;
continue;
}
}
assert(n==1);
vector<llo> ans;
for(int i=1;i<=2*bb;i++){
if(vis3[i]==1){
ans.pb(i);
}
}
cout<<ans.size()<<" ";
for(auto j:ans){
cout<<j<<" ";
}
cout<<endl;
}
/*cout<<zz<<endl;
cout<<zz2<<endl;
llo su=0;
llo cot=1500000000;
cot=1e6;
for(llo i=1;i<=50;i++){
llo cur=max(i-(i/3)-1,(llo)0);
su+=(1LL<<cur);
if(su>=cot){
cout<<i<<endl;
break;
}
}
*/
return 0;
}
Compilation message (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... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |