2020牛客多校训练 E-Easy Construction

题意
给定 n,k,问是否可以构造一个 1~n 的排列 P,使得对于 1~n 中任意的数 i,P 都存在一个
长为 i 的子区间,其和模 n 余 k。有解输出任意一组,无解输出 -1。
 
思想:分 奇偶讨论可以依次添加,偶数只有k=(n+1)*n/2%k   奇数只有k=0

 

 #include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
const double pi=acos(-1),eps=1e-8;
int vis[5005];

void f(int x,int k){
	int tmp=(x*(x+1)/2)%x;
	cout<0;i--){
		cout<>n>>k;
	if(n%2==0 && n*(n+1)/2%n==k){
		f(n,k);
	}else if((n&1)&&k==0){
		f2(n);
	}else{
		cout<<"-1";
	}

 	return 0;
}

 

你可能感兴趣的:(基础算法)