Codeforces Round #517

传送门

A. Cram Time

你有一本书,阅读第\(i\)页需要花费\(i\)的时间.你第一天有\(a\)的时间,第二天有\(b\)的时间,问你的总阅读页数的最大值.

Input:

一行包含\(2\)个数 \(a\ , b\ (0 \leq a\ , b\ \leq 10^9)\) 表示Lesha第一天的时间和第二天的时间.

Output:

输出第一行包含一个整数\(n\ (0 \leq n \leq a)\) 表示第一天的阅读数.第二行\(n\)个整数 \(p_1,p_2,...,p_n(1 \leq p_i \leq a)\)

表示阅读的页码.满足 \((\sum_{i=1}^{n} p_i \leq a)\).

输出第三行一个整数\(m\),第四行\(m\)个整数\(q_i\)意义·同上.且任意2个页码不能相同,最大化你输出的\(n + m\)

\(\color{green}{solution}\)

一个不算太显然的贪心.因为我们只需要最大化看的页数,所以页码一定
选最小的.(比如选5或7,选5一定不会比选7的答案差).并且页码总值加起来
一定不大于\(n+m\),所以我们可以先找出最大的\(k\) 满足 \(\sum_{i=1}^{k} \leq n+m\).
然后先从大到小填满\(a\),再从小到大填满\(b\)即可

B. Minimum path

给你一个\(n \times n\)的矩阵,矩阵中每个单元填充着一个小写字母\(a\),你可以改变矩阵中至多\(k\)个字母为任意小写字母.
找出一条字典序最小的从 \((1,1)\)\((n,n)\) 的路径.

Input:

第一行2个数\(n, k(1 \leq n \leq 2000,\ 0 \leq k \leq n^2)\) 如题所描述
第二行到第\(n+1\)行每行\(n\)个小写字母表示矩阵

Output:

一行一个字符串包含\(2n-1\)个小写字母表示你所找到的路径

\(\color{green}{solution}\)

C. Triple Flips

给你一个长度为\(n\)\(01\)序列\(a\),你可以选择3个数\(a_x,\ a_y\, a_z\),对每个数翻转 \((0变1,\ 1变0)\).

  • \(1 \leq x < y < z \leq n,\ y - x = z - y\)

询问能否进行一系列操作使整个序列全部为\(0\).

Input:

第一行一个数\(n(3 \leq n \leq 10^5)\)
第二行\(n\)个数表示输入序列

Output:

第一行输出一个"YES"或"NO"表示是否有答案.
如果有答案,那么第二行一个数\(m\)表示操作数量.第3到第\(m+2\)行输出你的具体操作.
注意,必须满足 \(0 \leq m \leq \lfloor \frac n 3 + 12 \rfloor\)

\(\color{green}{solution}\)

先把\(1\)全部移到一边去,使最左边和最右边的\(1\)的位置相差不大于一个较小值(比如10)
可以证明操作数小于 \(\lfloor \frac n 3 \rfloor\)然后对于剩余的地方爆搜判断是否合法,操作数小于\(12\).

D. Familiar Operations

你有2个数\(a\)\(b\),现在你可以对它们进行如下操作:

  • 将其中一个数乘上它的一个质因数\(p\);
  • 将之中一个数除以它的一个质因数\(p\);

询问:在最小的操作次数内使\(a\)的因子的个数与\(b\)的因子的个数相同.多组询问.

Input:

第一行一个整数\(T\ (T \leq 10^5)\) 表示询问组数.接下来\(T\)行每行2个正整数 \(a,\ b (1 \leq a,\ b \leq 10^6)\) 如题描述.

Output:

输出\(T\)行,每行一个数表示最小的操作次数


1365853-20181201174724279-625959164.gif

转载于:https://www.cnblogs.com/miecoku/p/10050384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值