CF 1100~1500 数论

GCD Partition

题意:

给定长度为 n 的数组 a

要求把它分成 k(1<kn) 个子段,要求所有子段和的最大公约数最大,求这个最大值。

li,ri(1lik) 分表示第 i 个子段的左右端点。这个子段的子段和 bi=j=liriaj

要求 liri,对于所有 1j<k,有 lj+1=rj+1,并且 l1=1,rk=n最大化 gcd(b1,b2,...,bk)

分析:

由于是对子段求公共GCD,可知子段和是连续的
假设对于一种分段方式中有 n 段,假设此时的公共 GCD 为 k,显然 k 必定满足是所有段和的约数,接下来合并其中两个段,此时的 n - 1 段仍然满足 k 为每段的约数
立即推:分成 2(k > 1)段时,此时的 GCD 最大

code

Make It Round

题意:

给定 nm, 我们可以把 n 变为 nk(1km,kN), 请输出末尾 0 的个数最多的 nk

  • 例如, 4810001000010 末尾 0 的个数更多
  • 如果有多个末尾 0 个数最多的 nk, 则输出其中最大的一个
  • 如果不存在末尾 0 个数更多的 nk, 则输出 nm

分析:

对于给定的n,若要在末尾产生0,则必须通过与本身因数中的25相乘或者直接乘10获得
所以应当尽量先消耗25的个数(在m的范围内取对应的数),最后要保证数尽量的大,所以在取完2510之后检查是否能继续乘上一个数使数增大

code

本文作者:347Foricher

本文链接:https://www.cnblogs.com/Aidan347/p/17419245.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   347Foricher  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.