QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#212206 | #962. Thanks to MikeMirzayanov | namespace_std | WA | 1ms | 9248kb | C++14 | 2.5kb | 2023-10-13 11:37:38 | 2023-10-13 11:37:40 |
Judging History
answer
#include<cstdio>
#include<vector>
#include<algorithm>
int q[1 << 20], p[1 << 20], n;
struct protocol
{
int tflag[1<<20];
int rec[122][20020], recnt;
void tFlipOnce(int l, int r, int d)
{
recnt++;
for(int i = l; i <= r; i++)
rec[d][i] = recnt;
for(int i = l; i < r + l - i; i++)
std::swap(q[i], q[r + l - i]);
}
void tFlip(int l, int r, int d)
{
int L = -1, rL = l;
for(int i = l + 1; i <= r; i++)
if(tflag[i] != tflag[i - 1])
{
if(!tflag[i]) L = rL;
else
{
rL = i;
if(~L) tFlipOnce(L, i - 1, d);
}
}
if(tflag[r] == 0) tFlipOnce(L, r, d);
}
void pSort(int l, int r, int d)
{
if(l == r)
return;
int len = r - l + 1, lim = len >> 1;
while(1)
{
int diff = 0;
for(int i = l; i <= r; i++)
{
tflag[i] = (q[i] >= l + lim);
if(i != l) diff = diff + (tflag[i] != tflag[i - 1]);
}
if(diff == 1 && tflag[l] == 0) break;
tFlip(l, r, d);
for(int i = l; i <= r; i++)
printf("%d ",q[i]);
puts("");
d++;
}
pSort(l, l + lim - 1, d);
pSort(l + lim, r, d);
}
}P;
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", p + i), q[p[i]] = i;
for(int i = 1; i <= n; i++)
if(q[i] != i)goto Z1;
puts("0");
return 0;
Z1:
for(int i = 1; i <= n; i++)
if(q[i] != n - i + 1)goto ZR1;
printf("1\n6");
for(int i = 1; i <= n; i++)
printf(" 1");
return 0;
ZR1:
P.pSort(1, n, 1);
for(int i = 1; i <= n; i++)
if(q[i] != i)
printf("Assertion failed: q[%d] = %d\n", i, q[i]);
printf("120\n");
for(int i = 1;i <= 120; i++)
{
std::vector<int>v;
int cnt = 0;
for(int z = 1; z <= n; z++)
{
if(z != 1)
if(P.rec[i][z] == 0 || P.rec[i][z] != P.rec[i][z - 1])
v.push_back(cnt), cnt = 0;
cnt++;
}
v.push_back(cnt);
if(i % 2 == 0) std::reverse(v.begin(), v.end());
printf("%d", v.size());
for(int t : v)printf(" %d", t);
puts("");
}
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 9248kb
input:
4 3 1 2 4
output:
2 1 3 4 1 2 120 3 1 2 1 3 1 1 2 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 1 1 4 1 1 ...
result:
wrong answer Integer 1 violates the range [2, 4]