POJ 3372 Candy Distribution 完全剩余系/奇偶性

原创 2012年03月23日 00:30:38

题意:老师给N个学生发糖,第x次发糖发给编号为 f(x) 的学生。可以推知:f(x) = x * (x+1) / 2 % N(学生号为 0, 1, 2, 3, ```N-1 )

现在问你是否每个学生都能得到至少一颗糖。

题解:要使每个学生都至少得到一颗糖,那么f(x) 应该构成模N的完全剩余系。

那么这个问题的反面就是在什么情况下,f(x) 不能构成模N的完全剩余系。

我们知道若存在 x != y, 使得 f(x) = f(y),那么f(x)边不能构成模N的完全剩余系。

若f(x)  = f(y), 推出 x * (x+1) / 2 % N = y * (y+1) / 2 % N,  推出 (x+y+1)(x-y) / 2 = 0 % N

这样可以假设 N^t = (x+y+1)(x-y)/2,于是这个等式成立的条件便是f(x) = f(y)成立的条件。

下面我们具体分析:

首先给出两个显而易见的结论:

(1).任意一个偶数都可以表示成 b * 2^e 的形式(b为奇数)

(2).(x+y+1)与(x-y)中必定一个是偶数一个是奇数


假如 N^t = (x+y+1)(x-y)/2

1.若N是奇数,那么N^t 还是奇数,于是我们一定可以找到适当的x,y,t使得 (x+y+1)(x-y)/2 = N^t,例如令 x = y + 2, 得 y + 3 = N^t,

得 y = N^t - 3。 所以在这种情况下f(x)  = f(y),不能构成完全剩余系。

2.若N是2的幂,令N=2^e,  那么N^t = 2^(e*t) 为偶数,而(x+y+1)(x-y)/2是奇数,显然不可能存在x,y,t使得 N^t = (x+y+1)(x-y)/2。所以在这种情况下f(x)  != f(y) 可以构成完全剩余系。

3.若N是形如 b * 2^e 的偶数,那么 N^t = b^t * 2^(e*t)。 

(x+y+1) = b^t, (x-y)/2 = 2^(e*t)

(x+y+1) = b^t     //一式

    (x-y) = 2^(e*t+1)   //二式

解一式二式构成的方程组,得到 2x = 2^(e*t+1) + b^t - 1,左右均为偶数,显然x是有解的,那么y也是有解的。所以在这种情况下f(x)  = f(y),不能构成完全剩余系。

注意上面的式子并不是一般的式子,我们只是用它们来判断存在性,由 N^t = (x+y+1)(x-y)/2这一假设引出的,是由结果到原因的推导,并不能随意的求解。例如 2x = 2^(e*t+1) + b^t - 1,假如一边是奇数,一边是偶数,那么x显然是无解的。

#include<cstdio>

int main()
{
    int n;
    while ( scanf("%d",&n) != EOF )
    {
        if ( n & ( n - 1 )) printf("NO\n"); //这个方式判断n是否是2的幂,还是蛮巧妙的。
        else printf("YES\n");
    }
    return 0;
}


Poj 3372 Candy Distribution

http://poj.org/problem?id=3372 一群小孩围成一个圈,老师顺时针发糖,分别每间隔0,1, 2, 3, 4……发一颗,问是否每个同学都有糖 数论得做法没想出来,打印了前几...
  • rebelqsp
  • rebelqsp
  • 2014年05月18日 23:58
  • 810

poj3372-Candy Distribution

Description N children standing in circle who are numbered 1 through N clockwise are waiting th...
  • believeLWN
  • believeLWN
  • 2016年07月14日 14:36
  • 311

poj 3372 Candy Distribution(完全剩余系)

Candy Distribution Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5448...
  • u010527492
  • u010527492
  • 2014年01月23日 18:35
  • 722

poj 3372(完全剩余系/奇偶性)

题意:老师给N个学生发糖,第x次发糖发给编号为 f(x) 的学生。可以推知:f(x) = x * (x+1) / 2 % N(学生号为 0, 1, 2, 3, ```N-1 ) 现在问你是否每个学生...
  • Weiguang_123
  • Weiguang_123
  • 2012年06月24日 00:44
  • 1015

poj 3372 完全剩余系

题意:老师给N个学生发糖,第x次发糖发给编号为 f(x) 的学生。可以推知:f(x) = x * (x+1) / 2 % N(学生号为 0, 1, 2, 3, ```N-1 ) 现在问你是否每个学生...
  • dumeichen
  • dumeichen
  • 2015年11月19日 23:11
  • 183

POJ - 3372 Candy Distribution

如果n有1个奇因数p,那么取a-b=n/p,a+b+1=2*p,就发现n是不满足的。 所以n是2的幂。...
  • nameofcsdn
  • nameofcsdn
  • 2016年07月23日 17:31
  • 1336

POJ 3372 —— Candy Distribution

#include #include #include #include #include #include #include using namespace std; typedef vector V...
  • fanzhengchen234
  • fanzhengchen234
  • 2013年05月13日 12:18
  • 322

POJ-3372(数论,完全剩余系)(Candy Distribution)

【题目描述】 N个小孩围成一个圈,老师 顺时针隔 0, 1, 2, 3,。。。个小孩发糖,问每个小孩是否都能领到糖。 【解题思路】 解法很简单 当N是2^K时输出YES,否则输出NO。 i...
  • famousDT
  • famousDT
  • 2012年04月05日 13:35
  • 531

POJ 3372 Candy Distribution

Candy Distribution Description N children standing in circle who are numbered 1 through N ...
  • qq_26658823
  • qq_26658823
  • 2016年07月23日 17:05
  • 124

poj 3372 Candy Distribution

Description N children standing in circle who are numbered 1 through N clockwise are waiting thei...
  • u011403366
  • u011403366
  • 2013年07月18日 15:50
  • 421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 3372 Candy Distribution 完全剩余系/奇偶性
举报原因:
原因补充:

(最多只允许输入30个字)