A. Admiral [jds]

数据很小,头尾各处理一半。

B. Array Challenge [zmy]

通过找规律可以得到

Fn=7∗Fn−1−4∗Fn−2

F_{n}=7*F_{n-1}-4*F_{n-2}
矩阵倍增

C. Boring Game [zmy]

对于二维的翻硬币游戏,显然我们需要使用 NIM 积来计算 SG 函数。论文《从”k倍动态减法游戏”出发探究一类组合游戏问题》给出了一个O(log2x)\mathcal{O}(log^2x) 的解法,但是由于此题的数据范围较大。所以这个方法不足以解决改题。下面是根据0303官方题解和官方标程,得到的另一种非常高效的做法。

假设我们已经求了x,y∈[0,255]x,y \in [0,255]的所有x⊗yx\otimes y的值(⊗\otimes即表示NIM积运算),我们现在用这个预处理的结果O(1)\mathcal{O}(1)计算出x,y∈[0,65535]x,y \in [0,65535]的所有x⊗yx\otimes y的值。

我们需要用到一些 NIM 积的性质。

  • 交换律: x⊗y=y⊗xx \otimes y = y \otimes x
  • 结合律: (x⊗y)⊗z=x⊗(y⊗z)(x\otimes y) \otimes z = x \otimes (y \otimes z)
  • 分配律:(x⊕y)⊗z=(x⊗z)⊕(y⊗z)(x \oplus y) \otimes z = (x \otimes z) \oplus (y \otimes z)
  • 对于x,y<22αx,y
    • x⊗22α=22αxx \otimes 2^{2^ \alpha} = 2 ^ {2^ \alpha}x
    • 22α⊗22α=32×22α=22α⊕22α−12^{2^ \alpha} \otimes 2^{2^ \alpha} = \frac{3}{2} \times 2^{2^ \alpha} = 2^{2^ \alpha} \oplus 2^{2^ \alpha-1}

设x=a1×28+a2=(a1×28)⊕a2x=a_1\times2^8+a_2=(a_1\times2^8) \oplus a_2,y=b1×28+b2=(b1×28)⊕b2y=b_1\times2^8+b_2=(b_1\times2^8) \oplus b_2

∴x⊗y=((a1×28)⊕a2)⊗((b1×28)⊕b2)

\therefore x \otimes y = ((a_1\times2^8) \oplus a_2) \otimes ((b_1\times2^8) \oplus b_2)

∴x⊗y=((a1×28)⊗(b1×28))⊕((a1×28)⊗b2)⊕(a2⊗(b1×28))⊕(a2⊗b2)

\therefore x \otimes y = ((a_1 \times 2^8)\otimes (b_1 \times 2^8))\oplus ((a_1 \times 2^8)\otimes b_2) \oplus (a_2 \otimes (b_1 \times 2^8))\oplus(a_2 \otimes b_2)

∴x⊗y=(a1⊗b1⊗(27⊕28))⊕((a1×28)⊗b2)⊕(a2⊗(b1×28))⊕(a2⊗b2)

\therefore x\otimes y = (a_1 \otimes b_1 \otimes(2^7 \oplus 2^8))\oplus ((a_1 \times 2^8)\otimes b_2) \oplus (a_2 \otimes (b_1 \times 2^8))\oplus(a_2 \otimes b_2)

∴x⊗y=(a1⊗b1⊗27)⊕(a1⊗b1⊗28)⊕(a1⊗b2⊗28)⊕(a2⊗b1⊗28)⊕(a2⊗b2)

\therefore x \otimes y = (a_1 \otimes b_1 \otimes 2^7) \oplus (a_1 \otimes b_1 \otimes 2^8)\oplus (a_1 \otimes b_2 \otimes 2^8)\oplus (a_2 \otimes b_1 \otimes 2^8)\oplus (a_2 \otimes b_2)

∴x⊗y=(28((a1⊗b1)⊕(a1⊗b2)⊕(a2⊗b1)))⊕(a1⊗b1⊗27)⊕(a2⊗b2)

\therefore x \otimes y = (2^8((a_1 \otimes b_1) \oplus (a_1 \otimes b_2) \oplus (a_2 \otimes b_1)))\oplus (a_1 \otimes b_1 \otimes 2^7) \oplus (a_2 \otimes b_2)

∴x⊗y=(28(((a1⊕a2)⊗(b1⊕b2))⊕(a2⊗b2)))⊕(a1⊗b1⊗27)⊕(a2⊗b2)

\therefore x \otimes y =(2^8(((a_1 \oplus a_2) \otimes (b_1 \oplus b_2))\oplus (a_2 \otimes b_2)))\oplus (a_1 \otimes b_1 \otimes 2^7) \oplus (a_2 \otimes b_2)

因此我们可以得到代码:

inline uint nim16(uint x, uint y) {uint a1=x>>8,a2=x&255;uint b1=y>>8,b2=y&255;uint c1=nim8[a1][b1];uint c2=nim8[a1^a2][b1^b2];uint c3=nim8[a2][b2];return ((c2^c3)<<8)|(nim8[c1][128]^c3);
}

通过同样的方法,最终我们可以在O(1)\mathcal{O}(1)的时间内,得到任意一个x,y∈[0,232−1]x,y \in [0,2^{32}-1]的x⊗yx \otimes y的值。

对于需要预处理的部分,我们可以先利用同样的思路,计算出所有2a⊗2b2^a \otimes 2^b的值,再算出所有x,y∈[0,255]x,y \in [0,255]的所有x⊗yx\otimes y的值。

至此,对于 NIM 积的求解得到了很好的解决。

回归到此题上,此题是一个经典的 Rugs 游戏,即二维 Ruler 游戏模型。根据 tartan 定理,我们只要求出对应两维的 Ruler 游戏的 SG 值,通过 NIM 积即可得到 Rugs 游戏的 SG 值。在 Ruler 游戏中,SG(x)=lowbit(x)SG(x) = lowbit(x),而[1,n][1,n]中所有数的lowbit(x)lowbit(x)的异或和为n⊕[n2]n \oplus [\frac{n}{2}] ,因此我们可以利用类似求矩形面积并的的方式,求解整个的 SG 值。

D. Brother and Sister [zmy]

利用期望的线性性,我们只需要考虑每个女生对答案的贡献即可。
不难发现这个图是一个内向树。
假设有mm个节点能够到达这个女生,对于任意一种没有选取该女生的方案,这mm个点一定都没有被选过。这种情况下选取00号女生的概率与选取该女生的概率之比为m:1m:1,但是从结果上来说,选取00号女生是必然事件,所以选取该女生的概率为mm+1\frac{m}{m+1}。
我们拓扑排序,先计算好链的部分,再枚举环,计算每个点的贡献。
还有一个小问题就是答案的输出,题目要求pq−1pq^{-1},且pp和qq是互质的状态。看上去很麻烦,实际是很好处理的。
我们先考虑两个不互质的数p1p_1和q1q_1和其约分后的结果p2p_2和q2q_2,不难发现p1×q−11=p2×q−12(mod1000000007)p_1\times q_1^{-1}=p_2 \times q_2^{-1} (\mod 1000000007),所以约分是没有意义的。
此外,不难发现,两个分数p1q1\frac{p_1}{q_1}和p2q2\frac{p_2}{q_2}我们分别计算pq−1pq^{-1}并求和,即可得到这个分数通分后pq−1pq^{-1}的结果。因此,实际上输出是比较简单的。

E. Cube Summation [zmy]

因为是33次方,所以我们考虑33个数a,b,ca,b,c对答案的贡献。假设a,b,ca,b,c互不相同,它对答案的贡献为选出这33的方案数乘以n−ia−jb−kcn-ia-jb-kc的划分数p(n−ia−jb−kc)p(n-ia-jb-kc)。
因此我们首先要解决划分数的问题。利用生成函数的知识,我们容易得到

p(x)=1∏(1−xi)

p(x)=\frac{1}{\prod (1-x^i)}
我们先用五边形数定理求其倒数:

∏(1−xi)=∑k=0∞(−1)kxk(3k±1)2

\prod (1-x^i)=\sum_{k=0}^{\infty}(-1)^kx^{\frac{k(3 k\pm 1)}{2}}
之后利用分治+NTT的做法得到 p(N)p(N)的生成函数
接下来考虑 a,b,ca,b,c的方案数,根据数字相同的个数,利用的轮转对称性:。

∑a,b,c,i,j,k,a≠b,b≠c,a≠cxia+jb+kc+3∑a=b≠c,i,j,kxamax{i,j}+ck+∑a=b=c,i,j,kxamax{i,j,k}

\sum_{a,b,c,i,j,k,a\not=b,b\not= c,a\not =c}x^{ia+jb+kc}+3\sum_{a=b\not=c,i,j,k}x^{a\max\{i,j\}+ck}+\sum_{a=b=c,i,j,k}x^{a\max\{i,j,k\}}
利用容斥原理可得
第一项:

(∑a,ixai)3−3(∑a,i,jxa(i+j))(∑a,ixai)+2∑a,i,j,kxa(i+j+k)

(\sum_{a,i}x^{ai})^3-3(\sum_{a,i,j}x^{a(i+j)})(\sum_{a,i}x^{ai})+2\sum_{a,i,j,k}x^{a(i+j+k)}
第二项:

3(∑a=b,i,jxamax{i,j})(∑a,ixai)−3∑a=b=c,i,j,kxa(max{i,j}+k)

3(\sum_{a=b,i,j}x^{a\max\{i,j\}})(\sum_{a,i}x^{ai})-3\sum_{a=b=c,i,j,k}x^{a(\max\{i,j\}+k)}
第三项不变
最后整理得到

(D(x)3+3S(x)D(x)+S2(x))

(D(x)^3+3S(x)D(x)+S_2(x))
其中 D(x)D(x)表示 xx的约数个数,S(x)S(x)表示 xx的约数和,S2(x)S_2(x)表示 xx的约数的平方和
利用NTT可以得到这部分
再乘上之前我们得到的p(x)p(x),即可得到最终的生成函数。

F. Function Counting [zmy]

仔细分析题目,容易的得到以下几个性质:

  • 我们认为xx向f(x)f(x)连了一条有向边,这样我们会得到若干个环。
  • 这个环中xx与−x-x的距离一定恰好是环长的一半。
  • 这个环长的一半,即绝对值的个数nn一定能整除kk,且k/nk/n为奇数,否则不会恰好到−x-x的位置。

下来我们来考虑下每个环的样子:

  • n=1n=1,方案只有一种
  • n=2n=2,方案有两种,但值得注意的是,由于两个数的间距可以为11,也可以为22,所以我们要考虑连续一段长度为44时,有特殊的构造方法。
  • n=3n=3,不妨设一段是1,2,31,2,3,每次一个数可以连向和它相同正负性的,也可以是相反正负性的,一共有44种。然后,我们会发现在连的时候,大多数长度都为22,但是会出现两次长度为11的跳跃。这个跳跃只能发生在开始或结束,所以一共有22种,总方案数为232^3。
  • n>3n>3 和之前相同的思路,方案数为2n2^n

这样我们能想到一个简单的 dp 方程,但是这个是O(nk√)\mathcal{O}(n\sqrt{k})的,当k<script type="math/tex" id="MathJax-Element-97">k</script>比较大的时候,可以直接 dp ,比较小的时候,我们需要构造线性递推,用矩阵倍增来进行转移。

G. Jacana Number [zmy]

按照题解的方法做了一遍。。。

H. Monkeys [zmy]

实际上我们只需要求出最多的联通块个数。考虑到每个联通块至少有两个猴子,所以我们需要在树上求最大匹配,用 dp 解决即可。

I. Rotating Line [wbr]

首先考虑无论怎样旋转 线段两侧的点的个数是维持不变的。因此问题转化成在坐标轴旋转的过程中如何按x轴维护点的序列。考虑在坐标轴y以外方向的点对,当坐标轴旋转时其相对顺序不会发生改变。因此按点对的向量将点对预处理好,扫一遍即可。

J. Schedule [zmy]

贪心。我们每次把任务分给在空闲状态下,上一次任务结束时间最晚的那台机器。用堆维护下即可。

K. Two Paths [zmy]

次小短路。正反跑两边 dijkstra 判断下每条非最短路径树的边对答案的贡献。

2017 Multi-University Training Contest - Team 10相关推荐

  1. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  2. 2017 Multi-University Training Contest - Team 1

    2017 Multi-University Training Contest - Team 1 01     签到的 #include<bits/stdc++.h> using names ...

  3. 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard(...)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  4. 2017 Multi-University Training Contest - Team 7:1002. Build a tree(递归)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  5. 2017 Multi-University Training Contest - Team 7:1010. Just do it(组合数?)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  6. 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  7. 2017 Multi-University Training Contest - Team 7:1011. Kolakoski(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  8. 2017 Multi-University Training Contest - Team 7:1005. Euler theorem(答案是(n+3)/2)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard 2017 Multi-Univer ...

  9. 2017 Multi-University Training Contest - Team 1—HDU6040

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6040 题意:不知道北航的同学为何解释题意之前都要想一段故事,导致刚开始题意不是很懂,题意就是给你n,m ...

  10. 2017 Multi-University Training Contest - Team 2——HDU6045HDU6047HDU6055

    讲一下这场多校赛里面比较简单的三个题 HDU6045  Is Derek lying? 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6045 题意:有 ...

最新文章

  1. vsftpd安装配置
  2. perl开发环境配置(Database,SOCKET,CISCO)j(ReShip)
  3. java和python哪个好就业2020-java和python哪个的前途更好?
  4. 《Java 核心技术卷1 第10版》学习笔记------ 接口(Interface)
  5. maven引入hadoop_Maven引入hadoop依赖包出错解决办法
  6. 别去取悦,心里没你的人
  7. jquery template.js前端模板引擎
  8. 名片识别信息分类python_python体验名片识别OCR
  9. 可变形卷积学习(RepPoints)
  10. ImagesLazyLoad 图片延迟加载效果
  11. Dalvik 堆内存管理与回收
  12. 在php页面如何调用接口,php之web页面之间的接口调用
  13. mysqldump简单解析
  14. 文章原创度检测工具哪个最好用?怎么操作是最好的?
  15. python正态分布函数_使用Python实现正态分布、正态分布采样
  16. 2022年医院三基考试药师(中医临床)考试模拟试题卷及答案
  17. C#远程主机强迫关闭一个现有链接问题简述
  18. 为什么c语言加法错误,分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)...
  19. 辛普森悖论和朴素贝叶斯
  20. js调用扫描仪(Web Twain Scan)-兼容Chrome、Edge、360、Firefox、IE、钉钉、企业微信等

热门文章

  1. 在材料技术方面的进步使游戏改变了MLCC的性能
  2. 【LeetCode】1101. The Earliest Moment When Everyone Become Friends 解题报告 (C++)
  3. java蓝牙程序怎么调试_蓝牙BLE调试助手软件源码
  4. 中国的超级计算机银河号,美国突然切断GPS,是银河号的一次屈辱,中国:不会再让悲剧发生...
  5. php中503代表什么,php 503是什么错误?_后端开发
  6. JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
  7. vue生命周期中的modle→view过程
  8. 手机端App出现崩溃常见类型
  9. PNP型三极管是不是要发射极接正电压,基极和集电极接地才能工作?能给张图不?
  10. 云备份的正确打开方式,你学会了吗?