20pts求调
查看原帖
20pts求调
848964
hzoi_Shadow楼主2023/2/1 19:22
#include<bits/stdc++.h>
using namespace std;
long long int dp[1000001];
int main()
{
	long long int t,n,m,dis,p,a,b,c,i,j,flag;
	cin>>t;
	for(i=1;i<=t;i++)
	{
		cin>>n>>a>>b;
		c=a+b;
		if(a==0&&b==0)
		{
			for(j=1;j<=n;j++)
			{
				cout<<j<<" ";
			}
		}
		else
		{
			if(c>n*(n+1)/2)
			{
				cout<<"-1";
			}
			else
			{
				if(a==0)
				{
					if(b<=(n/2+n+1)*(n/2)/2)
					{
						for(j=1;j<=n;j++)
						{
							cout<<j<<" ";
						}
					}
					else
					{
						cout<<"-1"; 
					} 
				}
				else
				{
					if(b==0)
					{
						if(a<=(n/2+n+1)*(n/2)/2)
						{
							for(j=n;j>=1;j--)
							{
								cout<<j<<" ";
							}
						}
						else
						{
							cout<<"-1"; 
						} 
					}
					else
					{
						memset(dp,0,sizeof(dp));
						m=n/2;
						p=a/m;
						dis=a-p*m;
						flag=0;
						if(m%2==0)
						{
							p+=(dis+m/2)/m;
							dis=(dis+m/2)%m;
						}
						for(j=p-m/2;j<=p-m/2+m-1j++;)
						{
							if(p-m/2+m-1-dis<j)
							{
								dp[j+1]=1;
							}
							else
							{
								dp[j]=1;
							}
							
						}
						for(j=1;j<=n;j++)
						{
							if(dp[j]!=0)
							{
								cout<<j<<" ";
								flag=1;
							}
						}
						dis=m;
						for(j=1;dis<n&&j<=n;j++)
						{
							if(dp[j]==0)
							{
								cout<<j<<" ";
								flag=1;
								dis++;
							}
						}
						if(flag==0)
						{
							cout<<"-1";
						}
					} 
				}
			}
		}
		cout<<endl;
	}
	return 0;
}
2023/2/1 19:22
加载中...