为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。
Sgu/137
来自NOCOW
< Sgu
构造:
首先给S[0]...S[N-1]都填上[K/N],假设旋转了t,旋转后为S',
那么S[0]一定为[K/N], S[N-1]一定为[K/N]+1,
S'[0]一定为[K/N]+1, S'[N-1]一定为[K/N]
并且
S[t] = S'[0] = [K/N]+1
S'[t] = S[t] = [K/N]+1
S[t*2] = S'[t] = [K/N]+1
S'[t*2] = S[t*2] = [K/N]+1
...
S[(t*p)%N] = [K/N]+1
那么p=K % N,并且在(t*p)%N = N-1(因为不会有下一步S'[N-1] = S[N-1])
那么 t * (K % N) % N = N-1。
只要枚举找出t是多少,剩下就按上面的递推出来就行了。
#include <stdio.h> using namespace std; int S[1000], N, K, p, Base, t; int main() { scanf("%d %d", &N, &K); Base = K / N; p = K % N; for (t = 1; t < N; ++t) if ((t * p) % N == N-1) break; for (int i = t; i != N-1; i = (i + t) % N) S[i] = 1; S[N-1] = 1; for (int i = 0; i < N; ++i) printf("%d ", S[i] + Base); return 0; } // From FingerSed