Atcoder ABC 400
400C
方法一:找规律
b的平方有1,4 , 9, 16, 25, 36, 49, 64, 81, 100
枚举
所以我们要计算个数 只需要枚举
注意要靠long double
方法二:
考虑枚举
-
当
a 确定时,N = 2^a \times b^2 \rightarrow b \leq \sqrt {N/2^a} , 所以b 的取值范围[1, \sqrt {N/2^a}] 。 -
但是注意一个情况,
2^1 \times 2^2 = 8, 2^3 \times 1^2 = 8 ,此时数字8 被记录了两次,所以需要去重。 -
重复的原因,若
b = 2 \times x 的形式,则\times 2 可以移到2 ^ a 中的a 里。 -
所以防止重复的计数方法就是
b 只能为奇数,把2 都归到2^a 里,即只取[1, \sqrt{N / 2^a}] 内的奇数。
400D
题意:
高桥打算去鱼店买鳗鱼。
他居住的城镇被划分为一个
我们将从上往下数第
关于每个单元格的信息由 .,则单元格 #,则单元格
他可以按任意顺序重复执行以下两种操作:
- 移动到城镇内且为道路的相邻单元格(上、下、左或右)。
- 选择四个方向(上、下、左或右)中的一个方向并在该方向上进行一次前踢。
- 当他进行一次前踢时,在他当前所在单元格的该方向上至多
2步距离内的每个单元格,如果该单元格是墙壁,就会变成道路。 - 如果至多
2步距离内的某些单元格在城镇范围外,仍然可以进行前踢,但城镇范围外的部分不会发生变化。
- 当他进行一次前踢时,在他当前所在单元格的该方向上至多
他从单元格
保证他的起始单元格和鱼店所在单元格都是道路。
求他到达鱼店所需的最少前踢次数。
方法一:双端队列代替普通队列:
-
当边权为 0 时,将对应的节点插入到双端队列的头部。因为边权为 0 意味着走这条边不会增加路径长度,所以优先考虑扩展这些节点。
-
当边权为 1 时,将对应的节点插入到双端队列的尾部。因为边权为 1 会增加路径长度,所以相对靠后处理。
方法二: 最短路算法
400E
题意:
一个正整数
-
- 对于
N 的每个质因数p ,p 整除N 的次数为偶数次。更正式地说,使得(p^k) 能整除N 的最大非负整数k 是偶数。
处理
思路:
埃氏筛法筛质数的时候,记录一下合数是多少个质数的倍数,如果这个合数是