Atcoder abc258
F
题目
https://atcoder.jp/contests/abc258/tasks/abc258_f
网格,4临移动
如果 x=Bn的线上移动或者y=Bn的线上移动,(B的倍数), 单位距离代价1
其它情况单位距离代价k
求(sx,sy) -> (gx,gy) 的最小代价
范围
t 2e5 测试点
b,k [1,1e9]
sx,sy,gx,gy [0,1e9]
3s
1024mb
题解
我的思路
显然是个数学处理一下, 就做的题
两个点分开考虑
一个点计算它本身, 四个方向到x=bn or y=bn , 的点,再到四个角的点
点类型 (普通0,边点1,十字交点2)
(0-任何) 直接距离乘k
(边点 - 边/十字) = 在方向上同bn, 则x1, 否则直接距离乘k
(十字-十字) = 距离x1
写了二十多分钟
代码
https://atcoder.jp/contests/abc258/submissions/32973579
1 |
|
H/Ex
https://atcoder.jp/contests/abc258/tasks/abc258_h
序列X满足
- 所有元素正奇数
- 和为s
- X前缀和的值不在集合A中, 集合A大小为N
求满足的要求的序列X的个数
范围
n 1e5
ai [1,1e18]
s [1,1e18]
题解
我的思路
果然读错题, 读成了需要序列X长度也是N
实际上对序列长度无要求
不考虑X而是直接考虑X的前缀和
dp[v] =
构成v的方案数
dp[Aj] = 0
dp[0] = 1
递推关系
dp[v] = sum{dp[v-1]+dp[v-3]+ dp[v-5]+...}
令f[i] = dp[i] + dp[i-2] + dp[i-4]
有dp[v] = f[v-1]
f[v] = dp[v] + f[v-2] = (v in A ? 0 :f[v-1]) + f[v-2]
所以可以直接算f 矩阵快速幂
然后问题是要处理掉v 在 A中的情况, 并且注意到v在A中是dp[v] == 0
并不意味f[v-1] == 0
1 | (f[v-1] f[v-2]) (f[v] f[v-1]) |
代码
https://atcoder.jp/contests/abc258/submissions/32981204
1 |
|
总结
F
没啥难的
G
内置 bitset 优化一下效率就行了
Ex
也没啥难的