题目大意:
输入两个整数n和k,要求一个p数组由数字1-n组成,并且存在一个长度为i的连续数组,i属于1-n,这个数组的和对n取模为k,如果不能,输出-1
题目思路:
首先判断1-n的和mod n是否等于k,如果不等于,说明无法构造,输出-1
否则:
1.n为奇数,那么k=0,可以构造成 n n-1 1 n-2 2
2.n为偶数,那么数组总和为n*(n+1)/2
1+(n-1)=n,2+(n-2)=n……所以有解k=n/2,n k n-1 1 n-2 2…
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
if((n*(n+1)/2)%n!=k)
cout<<-1;
else
{
if(k==0)
{
for(int i=1;i<=n/2;i++)
cout<<i<<" "<<n-i<<" ";
cout<<n;
}
else if(k==n/2)
{
cout<<n<<" "<<k;
for(int i=1;i<n/2;i++)
cout<<" "<<i<<" "<<n-i;
}
}
return 0;
}