Codeforces Round #369 (div.2) 即 Codeforces 711

版权声明:都是TATQAQ2333大爷教我的 https://blog.csdn.net/u012076197/article/details/52388597

CodeForces Round #369 (div.2) Descreption


A

有N排座位,每排有4个,这4个被分成了两组。给出每个座位是否是空的,问是否有相邻的座位。

B

给你一个N * N的幻方,其中缺了一个格子,要求你填上。

C

有N个点M种颜色,有些点没有颜色。给出了每个点分别染色成每种颜色的代价,要求染色后颜色的段数等于K。求最小代价。

D

有N个点,每个点有一条出边,你可以任意转换边的方向。问有多少种方案,使得整个图没有环。

E

一年有2 ^ N天,有K个人。问有两个人生日在同一天的概率。请输出最简分数,同时最简分数的分子分母还要取模。

CodeForces Round #369 (div.2) Solutions


A

直接检查即可,注意字符串的读入。

B

任取一个已经填满的行,算出和,求出空白,再验证:

  1. 行,列,主对角线的和是否一样。
  2. N是否为1。
  3. 答案是否为负数。

C

  • 一个显然的DP。对于每个点只需要纪录两个状态:该点的颜色、从1到该点的颜色段数。转移时只要枚举下一个点的颜色(如果未确定),再判断颜色段数是否增加(即是否和当前颜色一样)即可。复杂度O(N ^ 4).

  • 优化:

D

  1. 首先可以看出这个图是一个环套树的森林。(了解一下环套树的概念)
  2. 考虑一个环套树:对于一个无向环,只有两种反转会使得他变成一个有向环。对于不在环上的边,是否取反显然无关。那么这个环套树的方案即(2 ^ M - 2) * 2 ^ (N - M),其中N是环套树的点数,M是环的大小。
  3. 不同的连通块的答案显然可以相乘。

E

  • 这个题的答案是一个显然且经典的问题。设一年有N天,一共有K个人,那么所有人的生日都不在同一天的概率(即答案的补)为(N - 1) * (N - 2) * … * (N - K + 1) / N ^ K. 详细证明见《算法导论5.4.1》。

  • 接下来的任务是约分。因为天数是2 ^ N,所以只用计算分子中有多少个2即可。观察下分子,发现分子中2的个数和-1 to -K + 1中的个数一样,即和1 to K - 1中的个数一样。统计1 to K - 1中2的个数是个十分简单的问题,分别计算2的幂的出现次数并求和即可。

  • 最后要对分子和分母取模。分母取模是一个快速幂的事情。观察到模数特别小,而分子是一段连续数的连乘,且约去的数只有2(因为2和Mod互质,所以不用担心Mod的倍数除2后不再是Mod的倍数)。所以当K超过Mod时必然有Mod的倍数出现,那么取模后等于0。若K不超过Mod即K不超过1000003,暴力计算即可。

  • 当然别忘了取补。

猜你喜欢

转载自blog.csdn.net/u012076197/article/details/52388597