一份代码的两个if,不知怎的,交换一下顺序就 A 了,不交换顺序就 WA on #44。
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,a[N],flag=0;
int x[N],y[N],tx=0,ty=0,pre,en;
inline int check(int d)
{
pre=y[ty],en=tx;
for(int i=ty-1;i>=1;)
{
if(pre-y[i]==d)pre=y[i],i--;
else if(pre-x[en]==d)pre=x[en],en--;
else return 0;
}
return 1;
}
inline void printx(int d)
{
pre=y[ty],en=tx;
vector<int>ans;
ans.push_back(pre);
for(int i=ty-1;i>=1;)
{
if(pre-y[i]==d)pre=y[i],i--;
else if(pre-x[en]==d)pre=x[en],en--;
ans.push_back(pre);
}
for(int i=ans.size()-1;i>=0;i--)
{
cout<<ans[i]<<' ';
}
cout<<'\n';
ans.clear();
}
inline void solve(int s,int d)
{
tx=ty=0;
x[++tx]=a[s];//fdsafsadf
for(int i=1;i<s;i++)y[++ty]=a[i];
for(int i=s+1,id=s;i<=n;i++)
{
if(a[i]-a[id]==d)
{
x[++tx]=a[i];
id=i;
}
else
{
y[++ty]=a[i];
}
}
if(ty==0)
{
for(int i=1;i<n;i++)cout<<a[i]<<' ';
cout<<'\n';
cout<<a[n];
cout<<'\n';
exit(0);
}
if(ty==1)
{
for(int i=1;i<=tx;i++)cout<<x[i]<<' ';
cout<<'\n';
for(int i=1;i<=ty;i++)cout<<y[i]<<' ';
cout<<'\n';
exit(0);
}
//--------------------------------------------------------------------------------
if(check(y[ty]-x[tx]))
{
for(int i=1;i<=en;i++)cout<<x[i]<<' ';
cout<<'\n';
printx(y[ty]-x[tx]);
exit(0);
}
if(check(y[ty]-y[ty-1]))
{
for(int i=1;i<=en;i++)cout<<x[i]<<' ';
cout<<'\n';
printx(y[ty]-y[ty-1]);
exit(0);
}
//---------------------------------------------------------------------------------
//上面是两个if
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
solve(1,a[2]-a[1]);
solve(1,a[3]-a[1]);
solve(2,a[3]-a[2]);
cout<<"No solution";
return 0;
}