Codeforces Round 1043 (Div. 3)

比赛链接

这还是 CF 吗?这场有思维题吗?

A. Homework

按题意模拟即可。

提交记录

B. The Secret Number

所有 n10k+1\dfrac{n}{10^k+1} 即为答案。

提交记录

C1. The Cunning Seller (easy version)

化成三进制,按题目给出的公式计算即可。

提交记录

C2. The Cunning Seller (hard version)

首先还是化为三进制。第 xx 位上的数字 axa_x,表示取 3x3^x 个西瓜的次数。

  • 我们称一次操作为:将 axa_x 减少 11,将 ax1a_{x-1} 增加 33

一次操作后,总购买次数增加了 22

注意到进行操作后,总花费会变小,且 xx 越大,总花费减小得越多。所以我们从高位向低位枚举,每次都贪心地,对当前位做尽可能多的操作。

提交记录

D. From 1 to Infinity

通过枚举位数,判断最终在哪个数字处截断。然后问题就变成了:求 0x0\sim x 的所有数字的每一位的和。

枚举每一位 ii(定义最右边为第 00 位),求出第 ii 位上所有数字的和。将数字拆成三部分:第 ii 位左边的部分 ll、第 iipp、第 ii 位右边的部分 rr

  • 例如:1234512345,处理第 22 位时,拆成 l=12l=12p=3p=3r=14r=14

那么我们将 0x0\sim x 划分成以下几段:(用 [x    y    z][x~~~~y~~~~z] 表示 x,y,zx,y,z 三个整数拼接起来的结果。x,y,zx,y,z 的位数分别与 l,p,rl,p,r 相等)

  • [0    0    0][l1    9    999999][0~~~~0~~~~0] \sim [l-1~~~~9~~~~999\dots999]:和为 45×l×10i45\times l\times10^i
  • [l    0    0][l    p1    999999][l~~~~0~~~~0] \sim [l~~~~p-1~~~~999\dots999]:和为 p(p1)2×10i\dfrac{p(p-1)}{2}\times 10^i
  • [l    p    0][l    p    r][l~~~~p~~~~0] \sim [l~~~~p~~~~r]:和为 p×(r+1)p\times(r+1)

把每一位的和都算出来,再加起来即可。

提交记录

E. Arithmetics Competition

a,ba,b 从大到小排序,并对它们做前缀和。前缀和的结果记为 SAiSA_iSBiSB_i

那么题意可以转化为:已知 l,r,zl,r,z,记 F(i)=SAi+SBziF(i)=SA_i+SB_{z-i},求 maxlirF(i)\max_{l\le i \le r} F(i)

我们考虑 F(i)F(i)F(i+1)F(i+1) 的增量:

Δi=F(i+1)F(i)=SAi+1+SBzi1SAiSBzi=ai+1bzi\begin{aligned} \Delta_i &= F(i+1)-F(i)\\ &=SA_{i+1}+SB_{z-i-1}-SA_i-SB_{z-i}\\ &=a_{i+1}-b_{z-i} \end{aligned}

因为 ai,bia_i,b_i 都是递减的,所以容易得到 Δi\Delta_i 是递减的。所以 F(i)F(i) 是凸的。

三分即可。

提交记录

F. Rada and the Chamomile Valley

边双联通缩点后,找到 1n1\to n 的路径上的所有边,也就找到了原图上的必经边。

把所有必经边的两个端点都放在一个队列里,记录一下这条边的编号。然后 BFS 就做完了。

提交记录