QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#548806 | #5095. 九王唱 | Flamire | 0 | 0ms | 0kb | C++17 | 1.4kb | 2024-09-05 21:05:05 | 2024-09-05 21:05:06 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int n,seed,a[5011][5011],b[5011][5011],ban[5011];
int ch[10011],id[10011];
int solve(int p)
{
// printf("==============solve(%d)\n",p);
for(int i=1;i<=n+1;++i)ban[i]=0;
for(int i=p-1;i;--i)
{
for(int j=1;j<=n+1;++j)if(!ban[b[i][j]]){ban[b[i][j]]=1;ch[i]=j;id[b[i][j]]=i;break;}
}
for(int i=n;i>=p;--i)
{
for(int j=1;j<=n+1;++j)if(!ban[b[i][j]]){ban[b[i][j]]=1;ch[i]=j;id[b[i][j]]=i;break;}
}
for(int i=1;i<=n+1;++i)if(!ban[i])return i;
assert(0);
return 0;
}
int P;
bool cmp(int a,int b)
{
if((a>=P)!=(b>=P))return (a>=P)>(b>=P);
return a<b;
}
int main()
{
scanf("%d%d",&n,&seed);
if(!seed)
{
for(int i=1;i<=n;++i)for(int j=1;j<=n+1;++j)scanf("%d",a[i]+j);
}
else
{
mt19937 rnd(seed);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n+1;++j)
{
a[i][j]=j;
swap(a[i][j],a[i][rnd()%j+1]);
}
}
}
for(int i=1;i<=n;++i)for(int j=1;j<=n+1;++j)b[i][a[i][j]]=j;
printf("%d ",solve(1));
for(int i=1;i<n;++i)
{
ban[b[i][ch[i]]]=0;
ch[i]=1;
int u=i,v=1;
P=i+1;
while(1)
{
if(!id[b[u][v]]||id[b[u][v]]==u){id[b[u][v]]=u,ch[u]=v;ban[b[u][v]]=1;break;}
if(cmp(id[b[u][v]],u))
{
int nu=id[b[u][v]];
id[b[u][v]]=u;
ch[u]=v;
u=nu;v=ch[nu]+1;
}
else ++v;
}
for(int i=1;i<=n+1;++i)if(!ban[i]){printf("%d ",i);break;}
}
putchar(10);
fclose(stdin);fclose(stdout);return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Runtime Error
Test #1:
score: 0
Runtime Error
input:
8 0 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5 6 1 3 2 9 7 8 4 5
output:
result:
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Skipped
Dependency #1:
0%
Subtask #4:
score: 0
Skipped
Dependency #1:
0%