用户工具

站点工具


2020-2021:teams:farmer_john:jjleo:educational_codeforces_round_90_rated_for_div._2_virtual_participation

目录

A B C D E F G
+ + + + + O O

rank:411

A

  • 题意:两种购买模式,单价$a$元一个和打包$c$元$b$个,问是否存在一个购买数量使得前者更便宜,以及一个购买数量使后者更便宜。
  • 题解:考虑买一个和买$b$个即可。

B

  • 题意:$01$字符串,每次可以将一对相邻的$01$删除,两人交替操作,谁先无法操作就输,问先手是否必胜。
  • 题解:只要$01$都有,那就一定有相邻的,因此可操作次数就是两者数量的最小值。

C

  • 题意:给出一段伪代码,计算其中某个变量。
  • 题解:很水,摸了。

D

  • 题意:给出一个序列,最多翻转一个区间,使得偶数位(从$0$算起)的和最大。
  • 题解:显然要翻转一个长度为偶数的区间才有意义。翻转一个偶数区间相当于将所有奇数位的加上,所有偶数位的减掉,因此相当于求最大子区间和,直接扫一遍即可。

E

  • 题意:设$f(x)$为$x$每一位上的数字之和,求最小的非负整数$x$使得$f(x) + f(x + 1) + \dots + f(x + k) = n$,或判断无解。$(1 \le n \le 150,0 \le k \le 9)$
  • 题解:可以发现$f(x)$分成每$10$一组来看的话都是连续的数,因此如果$n$能表示成连续的数的和,那么利用等差数列求和公式就可以求出首项,令最后一位为$9-k$保证不进位,剩下的进行贪心使得位数最少即可保证合法且最小。如果$n$不能表示成连续的数的和,因为$0 \le k \le 9$,如果存在答案那么一定可以表示成两部分,这两部分都是连续的数的和,数据范围很小可以直接暴力枚举,然后再根据两部分的特点去判断是否可行,进而求出解。这个方法过于复杂,调了一万年。
  • 其实只需要考虑进位这一过程,进位后会损失尾部的$a$个$9$,多了一个$1$,因此只要枚举尾部有几个$9$,个位的数字$x$,即可计算出对应的和,然后在分界处放置一个$8$,高位直接贪心使得位数最小即可,形如$y99\ldots998\underbrace{99\ldots99}_{a个9}x$。

F

  • 题意:给出一个$n$个点的环,每条边可以供给与它相连的两个点能量,每个点需要$a_i$能量,每条边最多能供给$b_i$能量,问是否可行。$(2 \le n \le 10^6,1 \le a_i,b_i \le 10^9)$
  • 题解:确定$b_n$这条边给$a_1$供给的能量就可以进行贪心验证是否合法,但是$b_i$太大不能一个个枚举。考虑对于一个$b_n$给$a_1$供给能量的取值的验证过程中,如果不合法只会有两种情况,一种是$a_i(i<n)$的能量不够,一种是绕了一圈回来发现$a_n$的能量不够。第一种说明$b_n$给$a_1$供给的能量不够,因此更小的值都不行;第二种说明$b_n$给$a_1$供给的能量太多了导致给$a_n$的太少了,因此更大的值都不行。所以我们可以进行二分。

G

  • 题意:
  • 题解:线段树分治。(貌似多个log)
2020-2021/teams/farmer_john/jjleo/educational_codeforces_round_90_rated_for_div._2_virtual_participation.txt · 最后更改: 2020/06/27 23:03 由 jjleo