求助!!!
查看原帖
求助!!!
636936
tyccyt楼主2024/11/7 19:52

一份代码的两个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;
}
2024/11/7 19:52
加载中...