2012_多校10若干题解

来源:互联网 发布:软件数据线最新 编辑:程序博客网 时间:2024/06/05 19:23

1001:

首先可以根据b得到所有的素因子,现在把某素因子分配给n个位置,比如素因子2有4个,n=4,那么分配方案可以为

0,0,0,4   0,0,1,3    0,2,2,0等等,这个可以用dp很容易地预处理出来,将这些素因子的分配方案数相乘,但是要排除乘数为“1”的情况,可以用容斥原理来排除。


1004:

我们知道每个选手的运动方程都是直线,当时间足够长(t>t0)时,他们之间的先后顺序不会发生改变(假设他们都没有被炸弹炸)。t0一定是某2条直线的交点,从F1+S1*t=F2+S2*t 我们可得交点时间t=(F2-F1)/(S1-S2),由于abs(s1-s2)>=1且F最大值为500,所以t<=500,也就是最多在500s之后,选手之间的名次就再也不发生改变了,所以我们可以暴力处理前500s,后面的时间就按照排序输出就行了。

注意深入挖掘题目中的数据范围!!


1005:

我们知道答案的位数一定和N的位数相同,而且符合平方数%10^x的数非常之少,所以我们可以用BFS来解决,设我们用BFS构造的数为a,a有b位,剪枝条件为a^2%(10^b) != N%(10^b),这样就行了。

注意很多数学题如果满足条件的状态很少的话,搜索不失为一种很好地解法。