2020牛客暑期多校训练营(第六场)[E] Easy Construction

给定1~n的一个排列,对任意i∈[1,n],满足存在一个长度为i的子串,使得子串和mod n=k

题解:签到题,当i=n时可知,(n+1)*n/2=k(mod n),k一定为0(n为奇数)或n/2(n为偶数)。当n为奇数时,构造数列n 1 n-1 2 n-2...,当n为偶数时,构造数列n k 1 n-1 2 n-2 3 n-3...

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<cstring> 
 5 #include<queue>
 6 using namespace std;
 7 int n,k;
 8 int main(){
 9   scanf("%d%d",&n,&k);
10   int sum=n*(n+1)/2;
11   if (sum%n!=k) {
12     printf("-1\n");
13     return 0;
14   }
15   if (k!=0) printf("%d %d ",n,k);
16     else printf("%d ",n);
17   for (int i=1;i<(n+1)/2;i++){
18     if (i==k || i==n-k) continue;
19     printf("%d %d ",i,n-i);
20   }
21 return 0;
22 }

猜你喜欢

转载自www.cnblogs.com/ikkvix/p/13388609.html