ABC128
A.Apple Pie
Time:\(1:29\)
Dif:\(\color{Gray}{12}\)
Skip.
B.Guidebook
Time:\(5:31\)
Dif:\(\color{Gray}{350}\)
Skip.
C.Switches
Time:\(14:04\)
Dif:\(\color{Green}{805}\)
Description
\(n\) 个开关,\(m\) 个灯,对于第 \(i\) 个灯,必须要 \(s_{i,1},s_{i,2},\ldots,s_{i,k_i}\) 这些开关中打开的个数 \(\bmod 2=p_i\) 才能被打开。问有几种开关的状态使得灯全部被打开。
\(1\leq n,m\leq10\)
Solution
枚举每一种状态并判断是否成立。时间复杂度 \(O(2^n\times nm)\)。
D.equeue
Time:\(24:44\)
Dif:\(\color{Turquoise}{1324}\)
Description
有一个双端队列,四种操作。
- 将队头的数取出放在手上。
- 将队尾的数取出放在手上。
- 在手上任取一个数放在队头。
- 在手上任取一个数放在队尾。
最多进行 \(k\) 次操作,问操作完毕后手上的数的最大总和。
\(1\leq n\leq50,1\leq k\leq100,-10^7\leq v_i\leq10^7\)
Solution
因为放回去的肯定不再拿出来了,所以一定是先进行若干次 \(1,2\) 操作,再进行 \(3,4\) 操作。枚举从队头取的数目 \(l\),从队尾取的数目 \(r\),然后给这些取出的数排个序,设 \(num\) 为小于 \(0\) 的数据个数,去掉最小的 \(\min(num,k-l-r)\) 个数即可。时间复杂度 \(O(n^3\log n)\)。
E.Roadwork
Time:\(0\)
Dif:\(\color{Blue}{1840}\)
Description
道路上有 \(n\) 个关口,分别在数轴的 \(a_1,a_2,\ldots,a_n\) 处,关闭时间是 \([s_i,t_i)\)。现有 \(Q\) 个人在第 \(d_i\) 分钟从原点开始走,每一格走一分钟,问每个人在被拦住之前能走几分钟。
\(1\leq n,Q\leq10^5,0\leq s_i<t_i\leq 10^9,1\leq x_i\leq10^9,0\leq d_1<d_2<\ldots<d_Q\leq10^9\)
Solution
可以二分算出每个关口拦住那些人,然后区间赋值即可。时间复杂度 \(O(n\log Q)\)
Code
F.Frog Jump
Time:\(0\)
Dif:\(\color{Orange}{2464}\)
Description
青蛙在池塘上跳。最初在 \(0\) 位置。他不断进行以下操作:
- 向右跳 \(A\) 单位。
- 向左跳 \(B\) 单位。
如果当前位置是 \(n-1\) 则操作结束,如果当前位置超出了范围或者已经被跳过则失败。最终得分为经过的位置的权值之和。求得分最大值。
\(3\leq n\leq10^5,-10^9\leq s_i\leq10^9\)
Solution
青蛙经过 \(0,A,A-B,2A-B,2A-2B,3A-2B,\ldots,kA-kB,(k+1)A-kB=n-1\) 点。
把它们分个类,就是 \(A-B,2(A-B),3(A-B),\ldots\) 和 \(n-1-(A-B),n-1-2(A-B),\ldots\) 点,每一组都有 \(k\) 个点。我每往后推一步,就相当于 \(k+1\)。所以枚举 \(A-B\),然后跑到底,每一步更新一次答案即可。时间复杂度 \(O(n\times(\dfrac{1}{n}+\dfrac{2}{n}+\ldots+\dfrac{n-1}{n}+1))=O(n\ln n)\)。