QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#312462#962. Thanks to MikeMirzayanovhjl666WA 1ms3748kbC++142.4kb2024-01-23 22:01:022024-01-23 22:01:04

Judging History

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

  • [2024-01-23 22:01:04]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3748kb
  • [2024-01-23 22:01:02]
  • 提交

answer

#include<bits/stdc++.h>
#define db double
#define int ll
#define ll long long
#define ull unsigned long long
#define pb emplace_back
#define MP make_pair
#define pii pair<int, int>
#define vec vector<int>
#define fi first
#define se second
#define ls k<<1
#define rs k<<1|1
#define CLK (double)clock()/(double)CLOCKS_PER_SEC
using namespace std;
inline int read(){
    register int x=0,f=1;
    register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
inline void write(register int x){
    if(x<0){putchar('-');x=-x;}
    if(x>9)write(x/10);
    putchar(x%10+'0');
}
const int N=2e4+5;
int n,a[N],Rev,K;
vec Op;vector<vec> ans;
void Add(int x){Op.pb(x);}
void down(){
    Rev^=1;if(Op.size()==1)return ;
    ans.pb(Op);int p=0;
    for(auto i:Op)reverse(a+p,a+p+i),p+=i;
    reverse(a,a+n);Op.clear();
}
int work(int L,int R){
    vector<pii> P;
    for(int l=L,r;l<=R;l=r+1){
        for(r=l;r+1<=R&&(a[l]>>K&1)==(a[r+1]>>K&1);r++);
        P.pb(MP(l,r));//cerr<<l<<' '<<r<<"\n";
    }
    if(P.size()<=2){
        if((a[L]>>K&1)^Rev)Add(R-L+1);
        else for(int i=L;i<=R;i++)Add(1);
        return 1;
    }
    for(int i=0;i<P.size();i+=3){
        Add(P[min(i+1,(int)P.size()-1)].se-P[i].fi+1);
        if(i+2<P.size())Add(P[i+2].se-P[i+2].fi+1);
    }
    return 0;
}
void solve(){
    while(1){
        vector<pii> P;
        for(int l=0,r;l<n;l=r+1){
            for(r=l;r+1<n&&(a[l]>>(K+1))==(a[r+1]>>(K+1));r++);
            P.pb(MP(l,r));
        }
        // for(auto [l,r]:P)cerr<<l<<' '<<r<<"\n";
        // for(int i=0;i<n;i++)cerr<<a[i]<<" ";cerr<<"\n";
        // if(P.size()==1)break;
        int flg=1;
        for(auto [l,r]:P)flg&=work(l,r);
        down();if(flg)break;
    }
}
void MAIN(){
    n=read();
    for(int i=0;i<n;i++)a[i]=read()-1;
    for(int i=1;i>=0;i--)K=i,solve();
    if(Rev){for(int i=1;i<=n;i++)Add(1);down();}
    // for(int i=0;i<n;i++)cerr<<a[i]<<' ';cerr<<"\n";
    cout<<ans.size()<<"\n";
    for(auto op:ans){
        cout<<op.size()<<" ";
        for(auto i:op)cout<<i<<' ';
        cout<<"\n";
    }
}
signed main(){
//   freopen("read.in","r",stdin);
//	freopen("write.out","w",stdout);
    int T=1;while(T--)MAIN();
//  printf("\nTIME:%lf\n",(double)clock()/CLOCKS_PER_SEC);
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3748kb

input:

4
3 1 2 4

output:

4
2 3 1 
4 1 1 1 1 
3 2 1 1 
4 1 1 1 1 

result:

ok OK

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 3540kb

input:

6
6 5 4 3 2 1

output:

2
3 1 1 4 
5 1 1 1 1 2 

result:

wrong answer the permutation is not sorted