1 / 24

更上一层楼

更上一层楼. 郑曌. 郑曌 bbsID : superzz 2009-2010( Rhodea ) World Final Champion Ningbo, Champion Tokyo, 2 nd. Always an integer. Always an integer [world final 2008] 给定一个多项式 P ( x ), 给定一个整数 D , 判断 P ( x ) 是否恒为 D 的倍数. P ( x ) 的最高 此项 ≤ 100 . Sample

Download Presentation

更上一层楼

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 更上一层楼 郑曌

  2. 郑曌 bbsID: superzz 2009-2010(Rhodea) World Final Champion Ningbo, Champion Tokyo, 2nd

  3. Always an integer • Always an integer [world final 2008] 给定一个多项式P(x), 给定一个整数D, 判断P(x)是否恒为D的倍数. P(x)的最高此项≤ 100. • Sample P(x) = x2 + x, D = 2. • ANS = Yes

  4. Always an integer • 解法:不完全归纳法 • 随机取x的值 • 计算P(x)的值 • 如果P(x) 不是 D 的倍数,则ANS = No,结束。 • 继续执行上述3步,直到尝试了足够多的x取值。 • 思考: • 1,对于给定的x,如何计算P(x) • 2, 如何定义取到足够多x值 • 3,算法效率如何

  5. Always an integer • 应该随机选取多少个x进行测试? • Sample P(x) = x2 + x, D = 2. • 结论: • 设P(x)的最高项次数为k, 那么经过k次相邻两个数相减的操作后, 序列变成了一个常数序列, 只需要判断最后常数项C是否为D的倍数即可.列举序列中的x = 0 .. k的k+1项即可. • 时间复杂度为O(k2).

  6. Always an integer • 本质:差分方程 http://en.wikipedia.org/wiki/Difference_equation • 简单的想法: • 一个最高次项为k的多项式f(x),则方程f(x)=0的根有k个。 • 反过来说,k个不同的值(x1,x2,…xk)可以唯一确定一个多项式f(x)。 • f(x) = (x-x1)*(x-x2)*..(x-xk) • Any question?

  7. Steam roller • Steam Roller [world final 2008] • 有一个r * c的矩阵, 对于相邻的两个点, 从其中的一个点到达另一个点有一个权值. 现在要求从(r1, c1)到达(r2, c2), 路线是由若干条水平和垂直的路径连接组成, 每次可以从一个点往上下左右中的一个方向前进若干步, 其中第一条边和最后一条边的权值要计算2次, 中间的边的权值只计算一次.求(r1, c1)到(r2, c2)的最短路. • 1 ≤ r, c ≤ 100.

  8. Steam roller • Sample

  9. Steam roller • Sample • 紫色路径为权值需要双倍计算的路径。 • Red Line = (9 * 2) * 6 = 118 • Blue Line = (10 * 2) * 4 + (10 * 1) * 2 = 100

  10. Steam roller • 状态抽象: • 对于每个点(i, j)拆成8个点:分别表示上一步从上下左右的哪个方向移动到这个点.以及移动到这个点的这条边的权值是否已加倍. • 对于状态(i, j, direction, double)枚举下一步移动的方向, 考虑当前的方向与上一步方向是否一致以及k来决定最后一条边是否需要加倍. • 对这r * c * 8个点求最短路。

  11. Steam roller • Trick: • 一个点可能先往左移动若干步后又往右移动, 因为权值加倍的限制, 这样可能比直接往左移动到那个点的权值之和要小, 上下方向也是类似的. • 即使走到了终点(r2, c2)路线也不一定结束, 可能走到(r2, c2)再往前移动一格后回退一格, 使得走到(r2, c2)的那条边不用加倍而权值之和更小.

  12. Eyeball benders • Eyeball Benders [world final 2005] 给出由水平或垂直线段组成的两幅图,判断第一幅是否由第二幅图局部放大得到。保证至少有一个端点同时出现在两幅图中。

  13. Eyeball benders

  14. Eyeball benders • 思路 • 枚举两个图中都出现的顶点,确立放缩比例,放缩之后判断两个图形是否全等。

  15. Escape • Escape (from matrix67) 给定一个不超过2000*2000的网格,你在最左下角的位置(即(0,0)点),你的目的地在(x,y)。 要求你的路线不得经过同一个交叉点两次,且 不允许左转(题目背景让这个条件顺理成章:街道靠右行,左转不方便) 问合法的路线共有多少种。

  16. Escape

  17. Escape • 思路: 街道的选取唯一地决定了整个路线。 假设计算转弯恰好11次的路线有多少条。这样的路线一定含有三条向上走的路、三条向右走的路、三条向下走的路 和三条向左走的路。 除去第一条路和最后一条路的位置都是确定的,其它的路选在哪一行或者哪一列唯一地决定了整个路线。

  18. Escape • 排列组合? 向上走的路是C(5,2),向右走的路是C(7,3),向下走的路是C(4,3),向左走的路是C(3,2)。把它们各自的选取方案数乘起来就得到了拐弯11次的合法路径。 计算所有的路线数只需要从小到大枚举拐弯的次数,每一次计算都是常数复杂度的。

  19. Shortest path • Shortest path (from matrix67) 给定一个非负有向图,你有k次机会将某条边的权值减半,给定s,t。求s到t的最短路。

  20. Shortest path • K=0 求s到t的最短路。(Dijkstra, Bellman-ford, Floyed) • K=1 求出任意两点间最短路。 枚举一条边(u,v)。 求min_dist(s,u) + w(u,v) / 2 + min_dist(u, t)

  21. Shortest path • K>1 把原图分成k+1层,从0到k分别标号。 上面的层到下面的层有很多单向边,每条边都和原图上的某条边相对应,跨越了几层权值就打几次对折,表示我“走了一 条权值减过的边”。 因此,你当前走在第几层,就表示你已经用掉了几次减半机会。在这个有O(nk)个顶点的图上做最短路,其结果就是我们所要求的。

  22. Shortest path • K>1

  23. Exercise • http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=4787 • http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=4791 • http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=4794 • http://acm.pku.edu.cn/JudgeOnline/problem?id=3318

  24. Thanks

More Related