第0周题解
![5b3cd7aad318e174e70286d23ba4d80e.png](https://i-blog.csdnimg.cn/blog_migrate/440b467ffb6b39590a19081b2dd9a075.png)
第0周的题解经过宣传部鸽子的努力延期了一周终于重见天日了。第0周的题目是5题杂题或数学题,给新生们练练手,也开始了解到什么是算法。我们本周每题选了优秀的题解。如果同学们刚刚入门不能想到正解,可以借鉴一下他人的思路,假手于人。但无论如何都希望同学们把每道题目都accepted了。
![f4ffab296e3ed0fada87e385e084640c.png](https://i-blog.csdnimg.cn/blog_migrate/cbf28ec699deff4d759bdbf4fd9704e0.png)
![02a27f59a6211ba3133e8685ece08d4a.png](https://i-blog.csdnimg.cn/blog_migrate/1751ae54929db6c02996df65a747ba8f.png)
第零题
题解来源:liangfy
点积最大的两个向量设为Pm和Pn,他们的点积为P = |Pm|*|Pn|*cosθ,此时分三种情况:
1. |Pm| = |Pn| ,此时 |Pm|² = |Pn|² > P;
2. |Pm |> |Pn| ,此时 |Pm|² > |Pm| * |Pn| > P;
3. |Pm| < |Pn| ,此时 |Pn|² > |Pm| * |Pn| > P;
上述三种情况都表明点积最大值应为某个向量与自身的点积,因此只需算出每个向量与自身的点积,求出最大值即可。
![59e7940382dadcfcff471621aeb2b582.png](https://i-blog.csdnimg.cn/blog_migrate/db58993fcdceb999c99fc4834fe70b0f.png)
![7a95639eb4e0fa3a892f200c979b0670.png](https://i-blog.csdnimg.cn/blog_migrate/f6c11efec925998a61ee99c260ad9bdb.png)
第一题
题解来源:linyt
【题意分析】
两个人轮流吃n道菜,每次每人吃且仅吃1到k道菜,无菜可吃的人要去洗碗。
【算法分析】
对于双方来说,除先手后手外,两者是绝对公平的且有相同目的,则有相同的策略。
那么考虑还有n道菜的情况:
a) 0 < n <= k,先手必胜
策略:先手直接吃n道菜,让对方无菜可吃并去洗碗
b) n = k + 1,后手必胜
策略:若先手吃x道菜,后手都能通过吃 (n-x) 道菜胜利。
c) n > k + 1,n % (k + 1) = 0,后手必胜
策略:若先手吃x道菜,后手都能通过吃 (k + 1 - x) 道菜转化为 c)或b)且作为新后手的情况
d)n > k + 1,n % (k + 1) != 0,先手必胜
策略:先手通过吃 n % (k + 1) 道菜转化为c)或b)且作为新后手的情况
![9b65e2f7e4a2543a0cc45165c1b0f867.gif](https://i-blog.csdnimg.cn/blog_migrate/d1b8cfca8245f156a345cd7aa4e365aa.gif)
第二题
题解来源:linyt
【题意分析】
求1到n的合法排列数,满足对任意 i,1 <= i <= n,不是排列的第i个数。
【算法分析】
错排公式:(等式最后一部分前面要×n!)
推理利用容斥原理,首先考虑全排列的数量为:
其中不符合条件的排列数为:
有一个i在位置i上的排列数 + 有两个i在位置i上的排列数 + 有三个i在位置i上的排列数 + … + 有n个i在位置i上的排列数
= 至少有一个i在位置i上的排列数 - 至少有两个i在位置i上的排列数 + 至少有三个i在位置i上的排列数 + … + (至少)有n个i在位置i上的排列数
至少有一个i在位置i上的排列数:选择一个i放在i位置,令其不合法,剩下的全排列,方案数为:
至少有两个i在位置i上的排列数:选择两个i,令其不合法,剩下的还是全排列,方案数为:
以此类推。
综上可得原式。
乘法逆元:
详见费马小定理和扩展欧几里得
负数取模与阶乘逆元:
详见小学数学
第三题
题解来源:linyt
【题意分析】
如题。
【算法分析】
把调和平均数和算数平均数相乘就得到了答案。
利用暴力做法打表找规律。
设n有m个约数,pi为n的第i个约数。
第四题
题解来源:huangzx
对于第i次实验,一瓶试剂只有两个状态,被检测了与没有被检测,而一次实验也只有两种状态,沉淀了与没沉淀。那么当所有的实验组合起来时,若每一瓶试剂的被检测的顺序和次数合起来时是独一无二的,那么若一瓶试剂每一次有它的实验都有沉淀,而每一次没有它的实验都没有沉淀,因为试剂的状态是独一无二的,所以我们可以确定就是这瓶试剂混有Na2So4。
抽象出来,把被检测看成1,没有检测看成0,一次实验就是一位数,其实就是让每一瓶试剂都拥有一个独一无二的二进制表示方法,值得注意的是00000也是一种状态,所以这道题目我们要真正要找的便是十进制的n-1在二进制下有几位数。
题解来源:linyt
【题意分析】
有n瓶溶液,其中出了一瓶叛徒,仪器能检测若干任意瓶溶液中有没有叛徒,所有仪器能且仅能同时使用一次,在能找出叛徒的前提下,求最少仪器数。
【算法分析】
1. 如果我们用一台仪器检测集合A的溶液,则A的补集的情况也可知。
2. 如果我们同时用一台仪器检测集合A的子集B的溶液和A的补集的子集C的溶液,与分别用两台仪器检测的效果相同。
3. 最坏情况下所用的最少仪器数为答案。
4. 如果获得的信息总量超过可能情况总量,则方案合法。
5. 如果信息总量不过剩,则方案最优。
那么我们就每次二分(信息总量不过剩)n瓶溶液,取大的(最坏情况)那一个集合A的溶液放置一个仪器,继续二分,做相同操作,直到仅剩一瓶溶液(信息总量足够),二分的次数即为答案(若答案在A的补集,操作数小于等于在集合A找出叛徒)。