pku3372(找规律,公式,推理)
来源:互联网 发布:python spark z 编辑:程序博客网 时间:2024/06/10 16:55
http://162.105.81.212/JudgeOnline/problem?id=3372
这题有个很神奇的公式,没什么可说的,以下内容转自:LonelyBoy、笨小孩_sunhaowen。
题意:N个小孩围成一个圈,老师 顺时针隔 0, 1, 2, 3,。。。个小孩发糖,问每个小孩是否都能领到糖。
解法很简单 当N是2^K时输出YES,否则输出NO。printf((N & N - 1) ? "NO/n" : "YES/n");
关键这个怎么证明呢。看到Discuss里说和2次剩余有关,但是没有看出来。。。下面给出自己的简易证明。
当N是奇数时,拿 7 为例。当增量大于N时,就mod N,对增量没有影响。
增量 0 1 2 3 4 5 6 0 1 2 3 4 5 6
编号 0 1 3 6 3 1 0 0 1 3 6 3 1 0
你会看到,这个数列是重复的,重复区间大小是7,再观察着[0, 6]你会发现 这个重复区间是对称的,为什么会这样?
因为 3 + 4 = 7,0 +1 + 2 + 3 + 4的本质就是 0 +1 + 2 所以N为奇数时,他的重复区间都是对称的,所以可知,他最多只能发给 (N + 1) / 2个小孩糖吃,7时为 0 1 3 6 这4个小孩。
所以N为奇数时,一定为NO。
当N是偶数时,又有什么样的景象呢?以 10 为例:
增量 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
编号 0 1 3 6 0 5 1 8 6 5 5 6 8 1 5 0 6 3 1 0
你会发现他是以 2 * N的重复区间出现的。为什么会这样,因为 1 + 9 = 10,2 + 8 = 10。。。
那么 0 + 1 + ....9 % 10 = 5。即 0 + 1 + 。。。N - 1 % N = N / 2。两个区间合起来则又回到了0。
而再次向后加的时候 0 + ... (N - 1) + 0 + 1 = 0 + ...(N - 2) ,和奇数同样的道理,重复区间的内部是对称的。
怎么再次利用这样对称呢,我们发现 出现的编号其实是 从 0 为起点向前走 N / 2步,以及以 N / 2为起点向前走 N / 2步。
在根据编号0,和编号N / 2 在环上的对称性,来解决。
先看 0 的 N / 2步产生的路径L1,是 0 1 3 6 0 ,这里面出来一个大于N / 2的元素 6 。
再看 N / 2 的路径L2, 是 5 6 8 1 5,这里面出现了一个小于N / 2的元素 1。
而6 % 5 = 1。这是由于0和N / 2对称性的关系。
当 0 的 路径L1 中的 位置i的编号j 大于 N / 2,那么 L2中位置i上的编号一定是 j % (N / 2)。
那么我们就可以修改两条路径使其互不侵犯,让L1上所有值都mod (N / 2) ,如果L1能覆盖0 到 N / 2 - 1,则L2即可覆盖 N / 2 到 N - 1。
那么L1本质上就转化成了更小的问题 即 F(N / 2);
写出递归式
| Yes(N == 1);
F(N) = | F(N / 2) (N & 1 == 0)
| NO (N & 1 == 1)
所以可知 N 只有为2^K输出YES。
- pku3372(找规律,公式,推理)
- SDJZU 1077 美丽数 (找规律+推理)
- poj 1426 数学推理找规律
- ZOJ3629 Treasure Hunt IV(找规律,推公式)
- MU Puzzle(推理找规律)(多校第六场))
- //数学基础-推公式找规律
- 数学 | 推理 | 思维 | 打表 | 找规律 | 贪心 | 暴力
- pku3244(公式变换,推理)
- HDOJ1021(找规律)
- POJ1740(找规律)
- hdu (找规律)
- hdu4915(找规律)
- HDU5100(找规律)
- Hexagons!(找规律)
- Alarm(找规律)
- hdu6130(找规律)
- hdu5793 A Boring Question(推公式or迷之找规律)
- NYOJ 178 找规律(Lagrange插值公式)
- 【飞秋】使用C++语言创建Silverlight中的VisualState
- 各种咖啡的说明
- sql server 2000 torn_page_detection error (error 823)
- 一些有用的类库转载
- 【飞秋】位运算与组合搜索(二)
- pku3372(找规律,公式,推理)
- Gridview用法:根据某列的值改变gridview其他列的属性
- javascript 抛出自定义错误
- ETC——001
- 【飞秋】做需求分析一点心得
- Junit: How to skip a test case in Junit ?
- 基于J2ME的手机联网程序[多图]
- 理解I/O Completion Port
- Dll Explore查看程序加载组件