专栏文章
题解:P14079 [GESP202509 八级] 最短距离
P14079题解参与者 8已保存评论 13
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @minqyqdx
- 此快照首次捕获于
- 2025/12/02 06:55 3 个月前
- 此快照最后确认于
- 2025/12/02 06:55 3 个月前
Update
- 修改一处笔误(错误),删除最开头的话。
Solution
首先我们记录 。
观察到 ,但是 ,一开始我很奇怪。
然后我们思考,对于一条边的情况,我们先记当前答案为 :
-
,。
-
,。
然后我们考虑多条边的情况。
如果 ,我们有:
-
取 为 的倍数,那么代价为 。
-
取 ,,代价为 ,明显高于 。
-
取 , 同理,代价为 。
-
取 ,,那么代价为 ,明显不如 。
-
显然取三个点及以上时,代价都比 或者 高。
-
因此答案为 。
如果 ,则有:
-
取 为 的倍数,那么代价为 ,明显代价高于 。
-
取 ,,代价为 ,明显高于 。
-
取 , 同理,代价为 。
-
取 ,,那么代价为 。
-
显然取三个点及以上时,代价都比 或者 高。
-
因此答案为 。
这两种情况是类似的哦。
然后有一些特殊情况:
-
,。
-
,不能按照上面的讨论,举个例子很显然,然后我们发现任意一种代价都高于 ,因此 (留给读者自己分类讨论)。
实现
CPPnamespace lolcrying {
inline int gcd(int n ,int m) {return !m ? n : gcd(m ,n % m) ; }
signed main () {
int n = read() ,m = read() ,ans = 0;
int g = gcd(n ,m);
//就是个分类讨论。
if(n == m) ans = 0;
else if(min(n ,m) == 1) ans = p;
else if(g == 1) ans = min(2 * q ,p);
else ans = min(2 * p ,q);
writeln(ans);
return 0;
}
}
相关推荐
评论
共 13 条评论,欢迎与作者交流。
正在加载评论...