ABC216

ABC216

A

签到

B

签到

C

一开始有一个数字\(0\),每次可以选择:

\(A\):把数字加一

\(B\):把数字乘二

怎么用\(120\)次以内的操作得到数字\(n(n\leq1e18)\)

解:

\(n\)是偶数则除二,否则减一再除二

D

\(n\)个栈,每个栈里有\(k_i\)个数字,总共有\(2n\)个数字,其中\(1~n\)每个数字出现两次。

每次可以选择两个相同的栈顶数字消掉,能否消掉全部数字?

解:

模拟

E

\(n(1e5)\)个数字,有最多\(k(2e9)\)次选择机会,每次选择一个\(a_i\)得到\(a_i\)的贡献并将\(a_i-1\),求最大贡献

解:

二分大于多少的数字可以全部取走,剩下的不到\(n\)的次数用堆每次挑最大的取

F

给定长度为\(n(5000)\)的数组\(A\)\(B(a_i,b_i\leq 5000)\),求满足

\[max\{A_{i\in S}\}\geq \sum_{i\in S}B_i \]

的非空子序列\(S\)的个数,模\(998244353\)

解:

\(a_i,b_i\)看作一个物体的两个属性,按\(a_i\)从小到大排序,然后求任取\(j\leq i\)\(b_j\)之和小于\(a_i\)的方案数,其实是一个背包问题

G

给定若干区间范围和数字\(s_i\),表示在区间\([l,r]\)内有\(s_i\)个1,用最少的\(1\)构造这个\(01\)序列

解:

按区间右端点排序,树状数组统计这段区间内已经有多少个\(1\)了,用并查集找到最靠右的不是\(1\)的位置改成\(1\)

posted @ 2021-12-28 21:23  lovelyred  阅读(34)  评论(0编辑  收藏  举报