一模 (4) day2
第一题:
题目大意:二进制数 n mod m 的结果是多少? n 的长度(二进制数的位数)<=200 000; m 的长度(二进制数的位数)<=20。
解题过程:
1.我的算法是直接高精度模拟,但是数据坑爹地有前导0,有前导0的4个点都WA了。。 高精度除法的编程复杂度确实有点。
2.标程算法要简单的多,考虑m的长度并不大,直接计算出来,然后对n取模,因为n可以拆成 2^x1 + 2 ^x2 ..... 2^xk,从左往右扫描,每次 乘2 在加上当前位的数,对m取模。。利用同余定理,比较取巧,还真心没想到。
第二题:
题目大意:求从A到B的路径,要求边权的乘积最小。 每条边的边权 c<=10^9
解题过程:
1.裸的最短路问题,但是乘积太大可能要爆,就取一个log,把乘积转换成和。。 第一次碰到这种类型的题目,积累个经验。 spfa老是写错,今天又重新复习了一遍,终于能一次写对了。。
第三题:
题目大意:给出N个人M对朋友关系,一开始有一个人得了传染病,他的所有朋友回会来看望他,然后第二天他的病好了,所有朋友得病了,病好的第二天有免疫力,不会再次得病。。任何得病的人的朋友都会去看望他。。 求多少天后 所有人都没病。或者永远不可能结束。
解题过程:
1.一开始被题目中”保证答案小于2*10^9" 坑了,自己写了几个数据感觉都是宽搜一遍就好,一个人不可能被感染2次,无解更加不可能,然后不敢写。后来没时间了,就把宽搜写出来了,结果本来应该是求宽搜树的深度的,我把节点数给输出来了。
2.AC算法还真是宽搜,不太好说明,自己模拟一下就可以知道一个人不可能被感染2次。
Every day is meaningful, keeping learning!