QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#461685 | #962. Thanks to MikeMirzayanov | Kevin5307 | WA | 0ms | 3616kb | C++23 | 2.7kb | 2024-07-02 22:41:28 | 2024-07-02 22:41:28 |
Judging History
answer
//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
int a[20020];
vector<vector<int>> ans;
int cop;
void op(vector<int> vec)
{
cop++;
if(sz(vec)==1) return ;
ans.pb(vec);
vector<vector<int>> tmp;
int p=0;
for(auto len:vec)
{
vector<int> seg;
while(len--)
seg.pb(a[++p]);
tmp.pb(seg);
}
for(auto &arr:tmp)
rev(arr);
p=0;
for(auto seg:tmp)
for(auto x:seg)
a[++p]=x;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
vector<pii> vrange;
vrange.pb(1,n);
while(true)
{
int mlen=0;
for(auto pr:vrange)
mlen=max(mlen,pr.second-pr.first+1);
if(mlen==1) break;
vector<int> vlen;
bool finished=true;
for(auto pr:vrange)
{
int mid=(pr.first+pr.second)/2;
int len=0;
int lst=-1;
vector<int> clen;
for(int i=pr.first;i<=pr.second;i++)
{
int st=(a[(cop&1)?(pr.first+pr.second-i):i]>mid);
if(lst!=st)
{
if(len) clen.pb(len);
len=1;
lst=st;
}
else
len++;
}
clen.pb(len);
if(sz(clen)>2)
finished=false;
for(int i=0;i<sz(clen);i++)
{
if(i%4==1&&i+1<sz(clen))
{
vlen.pb(clen[i]+clen[i+1]);
i++;
}
else
vlen.pb(clen[i]);
}
}
if(!finished)
op(vlen);
else
{
vector<int> nvlen;
for(auto pr:vrange)
{
if(pr.first==pr.second)
{
nvlen.pb(1);
continue;
}
int mid=(pr.first+pr.second)/2;
if((a[pr.first]>mid)^(cop&1))
{
nvlen.pb(mid-pr.first+1);
nvlen.pb(pr.second-mid);
}
else
nvlen.pb(pr.second-pr.first+1);
}
op(nvlen);
if(cop&1)
op(vector<int>(n,1));
vector<pii> nrange;
for(auto pr:vrange)
{
int mid=(pr.first+pr.second)/2;
if(pr.first==pr.second)
nrange.pb(pr);
else
{
nrange.pb(pr.first,mid);
nrange.pb(mid+1,pr.second);
}
}
vrange=nrange;
}
}
cout<<sz(ans)<<'\n';
for(auto arr:ans)
{
cout<<sz(arr)<<" ";
for(auto x:arr)
cout<<x<<" ";
cout<<'\n';
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3616kb
input:
4 3 1 2 4
output:
3 2 1 3 3 1 1 2 4 1 1 1 1
result:
ok OK
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3592kb
input:
6 6 5 4 3 2 1
output:
6 2 3 3 6 1 1 1 1 1 1 3 2 1 3 6 1 1 1 1 1 1 5 1 1 1 2 1 6 1 1 1 1 1 1
result:
wrong answer the permutation is not sorted