【日常训练】【ACM】2019-10-27_ccpc2019秦皇岛

A: Angle Beats

我们写掉了,但是不是我写的,是pcf写的。他卡了好久常数,所以我就不写题解了

D: Decimal

题面

每次给你一个正整数 n n n,问 1 n \frac{1}{n} n1在十进制下是否是无限小数。

题解

如果 n n n只有2或者5作为质因子,那么就不是,否则就是。

这题很傻。

E: Escape

这题有点意思。

网络流

题面

  • 给你一个 n × m n\times m n×m的网格,有些格子可能有障碍。
  • 在第 1 1 1行上面放了若干个机器人,第 i i i个在 ( 0 , p i ) (0,p_i) (0,pi)
  • 在第 n n n行下面有若干出口,第 i i i个在 ( n + 1 , e i ) (n+1,e_i) (n+1,ei)
  • 机器人在没有外力的情况下,只能走直线。初始他们往下走。
  • 你可以在若干个格子里放置与水平面呈 4 5 ∘ 45^{\circ} 45的固定的反射装置,每个装置可以双向转换。(即:假如一个装置可以让左转向上,那也可以让上转向左;但是不能从右边过来或者从下边过来)
  • 多个机器人可以同时存在于一个格子中。就是说机器人互不影响。
  • 询问是否有一种放置方案,使得每个机器人都可以到达一个出口。
  • 1 ≤ n , m ≤ 200 1\leq n,m\leq 200 1n,m200

题解

  • 首先,我们观察一下,会发现这个东西用光线来描述似乎会更好。所以我就写光线了。
  • 我们首先会发现一件事情:不会有任何一对光线公用一个转换器,因为他们就没有合到一起的可能性。从这件事,我们就能推出来:
    • 对于一个格子,最多一条光线水平穿过,最多一条光线竖直穿过,最多一条光线在这里拐弯。
    • 当一个格子中有光线拐弯时,就一定不能再有其他光线经过了。
    • 一条光线走过的路线如果绕了一个圈,就一定会有一种不绕圈的方法完成等价的路线(因为在绕圈的交点,我们可以直接放置一个转换器)。
    • 一个出口最多走一条光线。
  • 那么,我们就可以建网络流图了(虽然我们还需要具体讨论一下,才能说明这样的确是能流的)
  • 如图:
    【日常训练】【ACM】2019-10-27_ccpc2019秦皇岛_第1张图片
  • 其中,每条边正向反向流量都是1。
  • 我们发现,这样子一弄, 1 → 0 → 3 1\rightarrow0\rightarrow3 103(或者反过来),就代表了一条竖直穿过的光线; 2 → 0 → 4 2\rightarrow0\rightarrow4 204(或者反过来),就代表了一条水平穿过的光线。
  • 拐弯的话,这也能表示。但是你可能会觉得,它会导致一个格子能让两条光线拐弯。比如 1 → 0 → 2 , 3 → 0 → 4 1\rightarrow0\rightarrow2,3\rightarrow0\rightarrow4 102,304或者 2 → 0 → 1 , 4 → 0 → 3 2\rightarrow0\rightarrow1,4\rightarrow0\rightarrow3 201,403。对于这件事,我们可以分类讨论。
    • 1 → 0 → 2 , 3 → 0 → 4 1\rightarrow0\rightarrow2,3\rightarrow0\rightarrow4 102,304,这东西就相当于一条竖直通过,一条水平通过。
    • 2 → 0 → 1 , 4 → 0 → 3 2\rightarrow0\rightarrow1,4\rightarrow0\rightarrow3 201,403,这东西虽然不能等价,但是他必定会导致其他地方和这个交叉口一起组合出一个环。那我们就可以直接交换两条光线得到合法解。也就是说,这个东西如果出现,是一定可以将之化为合法情况的。
  • 于是这个网络流就可行了。
  • 然后,我们再回到那幅图,发现1,2,3,4号节点一点用都没有,我们就只用把原图没有障碍的相邻节点连起来,跑Dinic就可以了。
  • 所以这道题的关键,就是认识到这个网络流是对的。
  • 复杂度 O ( n m ( n + m ) ) O(nm(n+m)) O(nm(n+m)),而且绝对跑不满。

F: Forest Program

这是傻题

题面

给你一个仙人掌森林,求有多少种删边方案使得删完之后剩下一个森林。

题解

对于一个 n n n个点的环,方案数就是 2 n − 1 2^n-1 2n1,对于不在环上的边,记其总和为 m m m,对答案贡献就是 2 m 2^m 2m,乘起来即可。

I: Invoker

这是傻题

题面

题面有点长,但是没有什么意思,就放链接了codeforces I题

题解

直接状压最后三位就可以了

J: MUV LUV EXTRA

题面

给一个小数,问最好的循环节是什么

循环节”好”程度衡量: a p − b l ap-bl apbl l l l是循环节长度, p p p是按循环节出现的长度(例:0.012312,按循环节123出现了5位)

题解

  • 倒序之后对字符串跑kmp
  • i i i位结尾的循环节,最短长度即为 i − n e i i-ne_i inei
  • 随便计算即可

其他的题

我们没做出来。

其中G有想法,但是pcf沉迷A题卡常,就没时间写了。

你可能感兴趣的:(训练,ACM)