为防止广告,目前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
个人工具