QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#312462 | #962. Thanks to MikeMirzayanov | hjl666 | WA | 1ms | 3748kb | C++14 | 2.4kb | 2024-01-23 22:01:02 | 2024-01-23 22:01:04 |
Judging History
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;
}
Details
Tip: Click on the bar to expand more detailed information
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