ARC122
康复训练 Day 2
A
in a row
means “连续地” but not “在一行”
经典因英语水平不够而错误理解题意
读明白题以后随便dp就行,记一下上一步填的是什么符号
B
要求最小化\(\frac{\sum(x+a_i-\min(a_i,2x))}{n}\),把常量扔掉以后即最小化\(y=nx-\sum\min(a_i,2x)\)
后面那个min的取值与\(a_i\)的\(2x\)的相对大小有关,所以想到给\(a_i\)排序
如果\(2x\)落在某段\([a_i,a_{i+1}]\)的区间上
发现y在这段区间上单调或不变,x取某一端点不会更劣
于是枚举\(x=\frac{a_i}{2}\),推推式子\(O(1)\)计算即可
C
经典赛时降智,赛后过题
\(x\)已经给定,考虑如果已知\(y\),那么我们只要不断拿大数减小数直至\(x=y\),再把这俩数step by step减成0即可
这样就逆向得到了操作方案,关键是如何确定b
遇事不决直接随机化,随一个b之后算算步数是否<130,计算时大数减小数的过程可以用大数除小数来优化,这样复杂度就和辗转相除一样了,\(O(\log n)\)的
极限数据测一下发现跑的贼快,交上去也确实可以AC(随机化大法吼啊)
感觉考场思路很接近正解了,这里也整理一下
容易知道辗转相加得到的是斐波那契数列\({f_i}\),也不难想到n可以拆分成\(O(\log n)\)个\(f_i\)之和
难点在于如何将这些\(f_i\)加起来,这里有一个很巧妙的思路
考虑已经有了一个辗转相加的操作序列,我们计算一下在某个位置插入\(+1\)操作之后对最后的\(x\)产生的影响,显然也会是斐波那契数列的某一项
最重要的一点是,插入的若干个\(+1\)对最终值的影响是独立的
剩下的就是根据奇偶性决定\(+1\)是给\(x\)还是\(y\)即可
代码咕咕咕了