QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#587784 | #7778. Turning Permutation | TMM233 | WA | 232ms | 255868kb | C++20 | 13.6kb | 2024-09-24 21:39:55 | 2024-09-24 21:40:02 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int maxn =1e6+5;
const int N=53;
ll dp[N][N][N][N][2];// [pos,kaitou,duan,i,left or right]
ll sum_dp[N][N][N][2][2];//[len,kaitou,duan,kaitou state,jiewei state]
ll sum_sum[N][N][2][2];//[len,duan,kaitou state,jiewei state]
ll pre1[N][N][N];//[ct_merge,ct_x,ct_v]
ll pre2[N][N][N][N];//[kon,fan,tie,jiao]
ll pre3[N][N][N][N];//[kon,fan,tie,jiao]
ll C[N][N];
ll dp1[N][N];//[kaitou,duan]
ll sum1[N];//[duan]
ll DP1[N][N];//[kaitou,duan]
void init0()
{
C[0][0]=1;
for(int i=1;i<N;i++)
{
C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
void init2()
{
pre2[0][0][0][0]=1;
for(int i=0;i<N-1;i++)
{
for(int j=0;j<N;j++)
{
for(int k=0;k<=j;k++)
{
for(int jiao=0;jiao<=i&&jiao+k<=j;jiao++)
{
if(j+1<N)
pre2[i+1][j+1][k][jiao+1]+=pre2[i][j][k][jiao];
for(int w=0;w+j<N;w++)
{
// for(int kk=0;kk<=2&&kk<=w;kk++)
if(1<=w)
pre2[i+1][w+j][k+1][jiao]+=pre2[i][j][k][jiao]*2;
if(2<=w)
pre2[i+1][w+j][k+2][jiao]+=pre2[i][j][k][jiao];
pre2[i+1][w+j][k+0][jiao]+=pre2[i][j][k][jiao];
}
}
}
}
}
// chu li zui hou yi ge mei you right
for(int i=0;i<N-1;i++)
{
for(int j=0;j<N;j++)
{
for(int k=0;k<=j;k++)
{
for(int jiao=0;jiao<=i&&jiao+k<=j;jiao++)
for(int w=0;w+j<N;w++)
{
for(int kk=0;kk<=1&&kk<=w;kk++)
pre3[i][w+j][k+kk][jiao]+=pre2[i][j][k][jiao];
}
}
}
}
}
void init1()
{
for(int i=1;i<N;i++)
{
for(int j=1;j<N;j++)
{
for(int k=0;k<=j&&k<=i-1;k++)
{
for(int w=0;k+w<=j&&w<=(i-k)*2-1;w++)
{
pre1[i+(j-k-w)-k][i][j]+=pre3[i-1][j][w][k];
}
}
}
}
}
// ll dp[N][N][N][N][2]; [pos,kaitou,duan,i,left or right]
// ll sum_dp[N][N][N];//[len,kaitou,duan]
void init3()
{
dp[2][1][1][1][0]=1;
dp[2][2][1][1][1]=1;
dp[2][2][2][1][1]=1;
dp[2][1][2][2][0]=1;
for(int i=2;i<N-1;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<=i;k++)
{
for(int w=1;w<=k;w++)
{
// add
for(int z=1;z<=k+1;z++)
{
if(z<=w)
{
if(z==1)
dp[i+1][i+1][k+1][z][1]+=dp[i][j][k][w][0];
else
dp[i+1][j][k+1][z][1]+=dp[i][j][k][w][0];
}
else
{
if(z==1)
dp[i+1][i+1][k+1][z][0]+=dp[i][j][k][w][1];
else
dp[i+1][j][k+1][z][0]+=dp[i][j][k][w][1];
}
}
// tie
for(int z=1;z<=k;z++)
{
if(z<w)
{
if(z==1)
{
dp[i+1][i+1][k][z][1]+=dp[i][j][k][w][0];// tie left
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];// tie right
}
else
{
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];
}
}
else if(z==w)
{
if(z==1)
{
dp[i+1][i+1][k][z][1]+=dp[i][j][k][w][0];// tie left
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];// tie right
}
else
{
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];
}
}
else if(z>w)
{
if(z==1)
{
dp[i+1][i+1][k][z][0]+=dp[i][j][k][w][1];// tie left
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];// tie right
}
else
{
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];
}
}
}
// jiao
for(int z=1;z<=k-1;z++)
{
if(z<w)
{
dp[i+1][j][k-1][z][1]+=dp[i][j][k][w][0];
}
else
{
dp[i+1][j][k-1][z][0]+=dp[i][j][k][w][1];
}
}
}
}
}
}
sum_dp[1][1][1][0][0]=1;
sum_dp[1][1][1][0][1]=1;
for(int i=2;i<N;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<=i;k++)
{
for(int w=1;w<=k;w++)
{
for(int z=0;z<=1;z++)
sum_dp[i][j][k][0][0]+=dp[i][j][k][w][z];
sum_dp[i][j][k][0][1]+=dp[i][j][k][w][0];
}
}
}
}
memset(dp,0,sizeof(dp));
dp[2][2][1][1][1]=1;
dp[2][2][2][1][1]=1;
for(int i=2;i<N-1;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<=i;k++)
{
for(int w=1;w<=k;w++)
{
// add
for(int z=1;z<=k+1;z++)
{
if(z<=w)
{
if(z==1)
dp[i+1][i+1][k+1][z][1]+=dp[i][j][k][w][0];
else
dp[i+1][j][k+1][z][1]+=dp[i][j][k][w][0];
}
else
{
if(z==1)
dp[i+1][i+1][k+1][z][0]+=dp[i][j][k][w][1];
else
dp[i+1][j][k+1][z][0]+=dp[i][j][k][w][1];
}
}
// tie
for(int z=1;z<=k;z++)
{
if(z<w)
{
if(z==1)
{
dp[i+1][i+1][k][z][1]+=dp[i][j][k][w][0];// tie left
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];// tie right
}
else
{
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];
}
}
else if(z==w)
{
if(z==1)
{
dp[i+1][i+1][k][z][1]+=dp[i][j][k][w][0];// tie left
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];// tie right
}
else
{
dp[i+1][j][k][z][1]+=dp[i][j][k][w][0];
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];
}
}
else if(z>w)
{
if(z==1)
{
dp[i+1][i+1][k][z][0]+=dp[i][j][k][w][1];// tie left
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];// tie right
}
else
{
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];
dp[i+1][j][k][z][0]+=dp[i][j][k][w][1];
}
}
}
// jiao
for(int z=1;z<=k-1;z++)
{
if(z<w)
{
dp[i+1][j][k-1][z][1]+=dp[i][j][k][w][0];
}
else
{
dp[i+1][j][k-1][z][0]+=dp[i][j][k][w][1];
}
}
}
}
}
}
sum_dp[1][1][1][1][0]=1;
sum_dp[1][1][1][1][1]=1;
for(int i=2;i<N;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<=i;k++)
{
for(int w=1;w<=k;w++)
{
for(int z=0;z<=1;z++)
sum_dp[i][j][k][1][0]+=dp[i][j][k][w][z];
sum_dp[i][j][k][1][1]+=dp[i][j][k][w][0];
}
}
}
}
sum_sum[1][1][0][0]=1;
sum_sum[1][1][0][1]=1;
sum_sum[1][1][1][0]=1;
sum_sum[1][1][1][1]=1;
for(int i=2;i<N;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<=i;k++)
for(int z1=0;z1<2;z1++)
for(int z2=0;z2<2;z2++)
sum_sum[i][k][z1][z2]+=sum_dp[i][j][k][z1][z2];
}
}
}
void solve()
{
ll n,k;cin>>n>>k;
k--;
init0();
init2();
init1();
init3();
vector<int> ans;
set<int> st;
st.insert(0);
st.insert(n+1);
for(int i=1;i<=n;i++)
{
ll lt=-1;
memset(dp1,0,sizeof(dp1));
memset(dp1,0,sizeof(DP1));
bool fg=0;
for(auto v:st)
{
if(v-lt-1==0)
{
lt=v;
continue;
}
if(!fg)
{
fg=1;
for(int j=lt+1,jj=1;j<=v-1;j++,jj++)
{
for(int k=1;k<=v-lt-1;k++)
{
dp1[j][k]=sum_dp[v-lt-1][jj][k][(lt!=0)][(v!=n+1)];
}
}
memset(sum1,0,sizeof(sum1));
for(int k=1;k<=v-lt-1;k++)
{
for(int j=lt+1;j<=v-1;j++)
sum1[k]+=dp1[j][k];
}
lt=v;
continue;
}
for(int w=1;w<=v-1;w++)
{
if(w<lt)
{
for(int ct_merge=1;ct_merge<=v-1;ct_merge++)
{
for(int ct_x=1;ct_x<=lt-1;ct_x++)
{
for(int ct_v=1;ct_v<=v-lt-1;ct_v++)
{
DP1[w][ct_merge]+=pre1[ct_merge][ct_x][ct_v]*dp1[w][ct_x]*sum_sum[v-lt-1][ct_v][(lt!=0)][(v!=n+1)];
}
}
}
}
else if(w>lt)
{
for(int ct_merge=1;ct_merge<=v-1;ct_merge++)
{
for(int ct_x=1;ct_x<=lt-1;ct_x++)
{
for(int ct_v=1;ct_v<=v-lt-1;ct_v++)
{
DP1[w][ct_merge]+=pre1[ct_merge][ct_v][ct_x]*sum1[ct_x]*sum_dp[v-lt-1][w-lt][ct_v][(lt!=0)][(v!=n+1)];
}
}
}
}
}
for(int j=1;j<=v-1;j++)
{
for(int k=1;k<=v-1;k++)
{
dp1[j][k]=DP1[j][k];
DP1[j][k]=0;
}
}
memset(sum1,0,sizeof(sum1));
for(int k=1;k<=n;k++)
{
for(int j=1;j<=n;j++)
sum1[k]+=dp1[j][k];
}
lt=v;
}
bool mk=0;
for(int j=1;j<=n;j++)
{
if(k>=dp1[j][1])
{
k-=dp1[j][1];
}
else if(dp1[j][1]!=0)
{
ans.push_back(j);
st.insert(j);
mk=1;
break;
}
}
if(!mk)
{
cout<<-1<<'\n';
return ;
}
}
for(auto v:ans)
cout<<v<<' ';
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0) ;
int t= 1;
// cin>>t;
while(t--)solve();
}
詳細信息
Test #1:
score: 100
Accepted
time: 191ms
memory: 249948kb
input:
3 2
output:
2 1 3
result:
ok 3 number(s): "2 1 3"
Test #2:
score: 0
Accepted
time: 232ms
memory: 251836kb
input:
3 5
output:
-1
result:
ok 1 number(s): "-1"
Test #3:
score: 0
Accepted
time: 194ms
memory: 254696kb
input:
4 6
output:
3 1 2 4
result:
ok 4 number(s): "3 1 2 4"
Test #4:
score: 0
Accepted
time: 206ms
memory: 254968kb
input:
4 11
output:
-1
result:
ok 1 number(s): "-1"
Test #5:
score: 0
Accepted
time: 186ms
memory: 254816kb
input:
3 1
output:
1 3 2
result:
ok 3 number(s): "1 3 2"
Test #6:
score: 0
Accepted
time: 196ms
memory: 254732kb
input:
3 10
output:
-1
result:
ok 1 number(s): "-1"
Test #7:
score: 0
Accepted
time: 187ms
memory: 255800kb
input:
3 52
output:
-1
result:
ok 1 number(s): "-1"
Test #8:
score: 0
Accepted
time: 192ms
memory: 255024kb
input:
3 756
output:
-1
result:
ok 1 number(s): "-1"
Test #9:
score: 0
Accepted
time: 192ms
memory: 254812kb
input:
3 7721
output:
-1
result:
ok 1 number(s): "-1"
Test #10:
score: 0
Accepted
time: 178ms
memory: 255600kb
input:
5 1
output:
1 3 2 5 4
result:
ok 5 number(s): "1 3 2 5 4"
Test #11:
score: 0
Accepted
time: 193ms
memory: 255640kb
input:
5 8
output:
2 4 1 3 5
result:
ok 5 number(s): "2 4 1 3 5"
Test #12:
score: 0
Accepted
time: 187ms
memory: 254540kb
input:
5 85
output:
-1
result:
ok 1 number(s): "-1"
Test #13:
score: 0
Accepted
time: 187ms
memory: 255560kb
input:
5 846
output:
-1
result:
ok 1 number(s): "-1"
Test #14:
score: 0
Accepted
time: 193ms
memory: 255800kb
input:
5 6957
output:
-1
result:
ok 1 number(s): "-1"
Test #15:
score: 0
Accepted
time: 192ms
memory: 254960kb
input:
8 1
output:
1 3 2 5 4 7 6 8
result:
ok 8 numbers
Test #16:
score: 0
Accepted
time: 203ms
memory: 254796kb
input:
8 7
output:
1 3 2 5 7 8 4 6
result:
ok 8 numbers
Test #17:
score: 0
Accepted
time: 188ms
memory: 255492kb
input:
8 71
output:
1 3 7 5 4 2 6 8
result:
ok 8 numbers
Test #18:
score: 0
Accepted
time: 208ms
memory: 255012kb
input:
8 863
output:
3 5 7 1 4 2 8 6
result:
ok 8 numbers
Test #19:
score: 0
Accepted
time: 183ms
memory: 254720kb
input:
8 7099
output:
-1
result:
ok 1 number(s): "-1"
Test #20:
score: 0
Accepted
time: 191ms
memory: 255608kb
input:
10 100000
output:
10 8 4 6 9 2 7 3 5 1
result:
ok 10 numbers
Test #21:
score: 0
Accepted
time: 218ms
memory: 254528kb
input:
10 62278
output:
7 1 9 8 5 10 3 6 2 4
result:
ok 10 numbers
Test #22:
score: 0
Accepted
time: 206ms
memory: 255796kb
input:
10 1000000
output:
-1
result:
ok 1 number(s): "-1"
Test #23:
score: 0
Accepted
time: 206ms
memory: 254716kb
input:
10 572106
output:
-1
result:
ok 1 number(s): "-1"
Test #24:
score: 0
Accepted
time: 187ms
memory: 255512kb
input:
10 10000000
output:
-1
result:
ok 1 number(s): "-1"
Test #25:
score: 0
Accepted
time: 192ms
memory: 255504kb
input:
10 9715489
output:
-1
result:
ok 1 number(s): "-1"
Test #26:
score: 0
Accepted
time: 195ms
memory: 254720kb
input:
10 100000000
output:
-1
result:
ok 1 number(s): "-1"
Test #27:
score: 0
Accepted
time: 187ms
memory: 255436kb
input:
10 85089137
output:
-1
result:
ok 1 number(s): "-1"
Test #28:
score: 0
Accepted
time: 201ms
memory: 255868kb
input:
10 1000000000
output:
-1
result:
ok 1 number(s): "-1"
Test #29:
score: 0
Accepted
time: 199ms
memory: 254788kb
input:
10 906109922
output:
-1
result:
ok 1 number(s): "-1"
Test #30:
score: 0
Accepted
time: 172ms
memory: 254744kb
input:
15 100000
output:
1 3 2 5 7 9 13 15 11 6 4 14 10 8 12
result:
ok 15 numbers
Test #31:
score: 0
Accepted
time: 180ms
memory: 254852kb
input:
15 99389
output:
1 3 2 5 7 9 13 15 6 4 11 8 10 14 12
result:
ok 15 numbers
Test #32:
score: 0
Accepted
time: 192ms
memory: 255596kb
input:
15 1000000
output:
1 3 2 7 15 13 5 11 6 9 8 14 4 10 12
result:
ok 15 numbers
Test #33:
score: 0
Accepted
time: 196ms
memory: 254672kb
input:
15 691130
output:
1 3 2 7 9 5 11 4 13 6 15 12 10 8 14
result:
ok 15 numbers
Test #34:
score: -100
Wrong Answer
time: 190ms
memory: 255632kb
input:
15 10000000
output:
-1
result:
wrong answer 1st numbers differ - expected: '1', found: '-1'