康复训练 Day 2
A
in a row
means “连续地” but not “在一行”
经典因英语水平不够而错误理解题意
读明白题以后随便dp就行,记一下上一步填的是什么符号
B
要求最小化(frac{sum(x+a_i-min(a_i,2x))}{n}),把常量扔掉以后即最小化(y=nx-summin(a_i,2x))
后面那个min的取值与(a_i)的(2x)的相对大小有关,所以想到给(a_i)排序
如果(2x)落在某段([a_i,a_{i+1}])的区间上
[egin{align}
y &= nx-summin(a_i,2x)\
&= nx-sum_{j le i}a_j-(n-i) imes2x\
&= (-n+2i)x-sum_{j le i}a_j
end{align}
]
发现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)即可
代码咕咕咕了