第一次AK周赛
比赛传送门
A
开始时间 +$5$(mod24) 即可
Code
1 | void solve() { |
B
五的倍数,即末位数字为 $0$ 或 $5$ 且数字本身不为 $0$
但据数据范围可知 $n$ 不为 $0$ ,无需特判直接判断每一位看看是不是 $5$ 或 $0$即可
Code
1 | void solve() { |
C
对于$(2≦i≦n)$ 如果gcd(a[i],a[i-1])为 $1$ ,那么肯定要修改,可以修改为任意正整数,那就修改成相邻的数的倍数,这样左右邻居都能保留不用修改
Code
1 | void solve() { |
D
先求所有无序对的总和 $sum$ ,以及奇偶性不同的无序对对数 $cnt$ (通过奇数个数乘偶数个数求得)
因为 $a_i +a_j$ 为奇数即二者奇偶性不同时除以 $2$ 会损失 $0.5$
所以答案就为 $(sum-cnt)/2$
Code
1 | void solve() { |
E
BFS模拟过程即可,注意用 $set$ 存走过的数避免重复陷入循环
同时加入位数剪枝
Code
1 | void solve() { |
F
通过改一段区间来最小化邻居距离,不难想到对每一个位置倒置时产生的变化值求前缀和,然后求得区间变化量的最小值(可能是正,也可能是负)
若是正数可以选择不进行倒置操作,负数则可以更新答案
对于变化值怎么求:
如果当前位是 $1$ (即$a_i='1'$) 变化值为 $cnt1[i]-cnt0[i]-1$
如果当前位是 $0$ 变化值为 $cnt0[i]-cnt1[i]-1$
Code
1 | void solve() { |
说些什么吧!