QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#212206#962. Thanks to MikeMirzayanovnamespace_stdWA 1ms9248kbC++142.5kb2023-10-13 11:37:382023-10-13 11:37:40

Judging History

你现在查看的是最新测评结果

  • [2023-10-13 11:37:40]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:9248kb
  • [2023-10-13 11:37:38]
  • 提交

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]