#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int gb(int n,int b){
return n>>b&1;
}
inline int cnt(int n,int l,int r){
return __builtin_popcount(n>>l&(1<<r-l+1)-1);
}
inline ll com(int n,int m){
ll s=1;
for(int i=n;i>n-m;i--)
s*=i;
for(int i=2;i<=m;i++)
s/=i;
return s;
}
vector<int> encode(ll n,int v,int l){
vector<int> c(l,-1);
for(int b=0;b<l;b++)
for(int i=b?c[b-1]+1:0;i<v;i++){
ll r=com(v-i-1,l-b-1);
if(n>=r)n-=r;
else{c[b]=i; break;}
}
return c;
}
ll decode(vector<int> c,int v){
int l=c.size();
ll n=0;
for(int b=0;b<l;b++)
for(int i=b?c[b-1]+1:0;i<c[b];i++)
n+=com(v-i-1,l-b-1);
return n;
}
vector<int> st(vector<int> a){
vector<int> cs(10);
iota(cs.begin(),cs.end(),0);
sort(cs.begin(),cs.end(),[&](int x,int y){
for(int i=0;i<4;i++)
if(gb(a[i],x)!=gb(a[i],y))
return gb(a[i],x)<gb(a[i],y);
return false;
});
vector<int> na(10);
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if(gb(a[i],cs[j]))na[i]|=1<<j;
return na;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
vector<int> v,pv(1<<10,-1);
for(int S=0;S<1<<10;S++){
int p=__builtin_popcount(S);
if(p==2)continue;
if(p==4){
if(cnt(S,8,9))v.emplace_back(S);
}
else if(p==6){
if(cnt(S,8,9)!=2)v.emplace_back(S);
else if(cnt(S,4,7)!=2)v.emplace_back(S);
}
else if(p==5){
if(cnt(S,8,9)!=1)v.emplace_back(S);
else{
bool f=false;
for(int i=0;i<4;i++)
f|=cnt(S,i*2,i*2+1)!=1;
if(f)v.emplace_back(S);
}
}
else v.emplace_back(S);
}
for(int i=0;i<v.size();i++)
pv[v[i]]=i;
string tp; ll N; int t; cin>>tp>>N>>t;
while(t--){
if(tp[0]=='A'){
ll n; cin>>n;
cout<<"0000000011\n";
cout<<"0000111100\n";
cout<<"0011001111\n";
cout<<"0101010101\n";
auto c=encode(n,v.size(),6);
for(int i:c){
for(int j=0;j<10;j++)
cout<<gb(v[i],j);
cout<<'\n';
}
cout<<flush;
}
else{
vector<int> a(10);
for(int i=0;i<10;i++){
string s; cin>>s;
for(int j=0;j<10;j++)
if(s[j]&1)a[i]|=1<<j;
}
for(int i=1;i<10;i++)
if(__builtin_popcount(a[i])==2)
swap(a[i],a[0]);
a=st(a);
for(int i=2;i<10;i++)
if(__builtin_popcount(a[i])==4&&pv[a[i]]<0)
swap(a[i],a[1]);
a=st(a);
for(int i=3;i<10;i++)
if(__builtin_popcount(a[i])==6&&pv[a[i]]<0)
swap(a[i],a[2]);
a=st(a);
for(int i=4;i<10;i++)
if(__builtin_popcount(a[i])==5&&pv[a[i]]<0)
swap(a[i],a[3]);
a=st(a);
vector<int> c;
for(int i=4;i<10;i++)
c.emplace_back(pv[a[i]]);
sort(c.begin(),c.end());
cout<<decode(c,v.size())<<endl;
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | #include<bits/stdc++.h> using namespace std; typedef long long ll; inline int gb(int n,int b){ return n>>b&1; } inline int cnt(int n,int l,int r){ return __builtin_popcount(n>>l&(1<<r-l+1)-1); } inline ll com(int n,int m){ ll s=1; for(int i=n;i>n-m;i--) s*=i; for(int i=2;i<=m;i++) s/=i; return s; } vector<int> encode(ll n,int v,int l){ vector<int> c(l,-1); for(int b=0;b<l;b++) for(int i=b?c[b-1]+1:0;i<v;i++){ ll r=com(v-i-1,l-b-1); if(n>=r)n-=r; else{c[b]=i; break;} } return c; } ll decode(vector<int> c,int v){ int l=c.size(); ll n=0; for(int b=0;b<l;b++) for(int i=b?c[b-1]+1:0;i<c[b];i++) n+=com(v-i-1,l-b-1); return n; } vector<int> st(vector<int> a){ vector<int> cs(10); iota(cs.begin(),cs.end(),0); sort(cs.begin(),cs.end(),[&](int x,int y){ for(int i=0;i<4;i++) if(gb(a[i],x)!=gb(a[i],y)) return gb(a[i],x)<gb(a[i],y); return false; }); vector<int> na(10); for(int i=0;i<10;i++) for(int j=0;j<10;j++) if(gb(a[i],cs[j]))na[i]|=1<<j; return na; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); vector<int> v,pv(1<<10,-1); for(int S=0;S<1<<10;S++){ int p=__builtin_popcount(S); if(p==2)continue; if(p==4){ if(cnt(S,8,9))v.emplace_back(S); } else if(p==6){ if(cnt(S,8,9)!=2)v.emplace_back(S); else if(cnt(S,4,7)!=2)v.emplace_back(S); } else if(p==5){ if(cnt(S,8,9)!=1)v.emplace_back(S); else{ bool f=false; for(int i=0;i<4;i++) f|=cnt(S,i*2,i*2+1)!=1; if(f)v.emplace_back(S); } } else v.emplace_back(S); } for(int i=0;i<v.size();i++) pv[v[i]]=i; string tp; ll N; int t; cin>>tp>>N>>t; while(t--){ if(tp[0]=='A'){ ll n; cin>>n; cout<<"0000000011\n"; cout<<"0000111100\n"; cout<<"0011001111\n"; cout<<"0101010101\n"; auto c=encode(n,v.size(),6); for(int i:c){ for(int j=0;j<10;j++) cout<<gb(v[i],j); cout<<'\n'; } cout<<flush; } else{ vector<int> a(10); for(int i=0;i<10;i++){ string s; cin>>s; for(int j=0;j<10;j++) if(s[j]&1)a[i]|=1<<j; } for(int i=1;i<10;i++) if(__builtin_popcount(a[i])==2) swap(a[i],a[0]); a=st(a); for(int i=2;i<10;i++) if(__builtin_popcount(a[i])==4&&pv[a[i]]<0) swap(a[i],a[1]); a=st(a); for(int i=3;i<10;i++) if(__builtin_popcount(a[i])==6&&pv[a[i]]<0) swap(a[i],a[2]); a=st(a); for(int i=4;i<10;i++) if(__builtin_popcount(a[i])==5&&pv[a[i]]<0) swap(a[i],a[3]); a=st(a); vector<int> c; for(int i=4;i<10;i++) c.emplace_back(pv[a[i]]); sort(c.begin(),c.end()); cout<<decode(c,v.size())<<endl; } } return 0; } |
English