给定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 }