27 October in ss

Contest

A. chrono

计算某年的干支纪年法年份。

Too easy.

然而我忘记 C++ 取模运算是向0取整。然而数据太水,还是有 90 分。

B. clock

计算某时刻时针和分针的夹角。假设时针和分针指针任意时刻对齐刻度,例如时刻 12:11 夹角为 0°,时刻 12:12 夹角为 6°。角度值范围 [0°, 180°)。

Too easy.

C. sequence

给定一个长度为 \(n\) 的数列 \(a\),每个修改操作仅限对一段连续区间进行自增、自减,求使数列每个数相同的最小操作次数,以及达到操作次数最小的方案总数。$1\le n\le 10^5,\ 0\le a_i< 2^{31},\ a_i\in \mathbf{N} $。

样例输入:

10
4 32 16 23 46 49 42 16 30 21 

样例输出:

75
18 

先对数列求出差分数组,记为 \(d=\{28,-16,7,23,3,-7,-26,14,-9\}\)

求出 \(d\) 中所有正数的和、所有负数的和的相反数,二者最大值即为最小操作次数。

二者的差 \(+1\) 即为方案总数。

Why?

每次对数列的修改操作,对应到差分数组当中,则为\(d\) 中任意两个数进行修改,其中:一个自增、一个自减。由此,问题转化为把差分数组变为全 0 的操作次数。

显然,把正数变为 0 和把负数变为 0 应该是同步的,而其中一者多出来的次数是数组整体做修改。所以最小操作次数即为二者最大值。多余的操作次数,可以是把整个数组自增,也可以是把整个数组自减。所以方案总数即为多余操作次数 \(+1\)

拓展:把 \(n\) 个相同物品放入 \(m\) 个篮子, 若

(1) 篮子可以为空, 篮子不同:共有 \(C_{n+m-1}^{m-1}\) 种方案.

(2) 篮子不可以为空, 篮子不同:共有 \(C_{n-1}^{m-1}\) 种方案. (挡板法)

(3) 篮子可以为空, 篮子相同:方案递推式为 \(f(n,m)=f(n-1,m)+f(n,m-1)\).

(4) 篮子不可以为空, 篮子相同:方案算式为 \(f'(n,m)=f(n-m,m)\).

推广:记 \(Q(n,m)\) 为把自然数 \(n\) 拆分为 \(m\) 个无序的自然数的方案数.

\[\displaystyle Q(n,m)=\begin{cases} 1,& m=1\text{ or } n=1,\\ Q(n,n),& m>n,\\ 1+Q(n,n-1),& m=n,\\ Q(n,m-1)+Q(n-m,m),& m<n. \end{cases} \]

D. milktea

已知摄入某能量物质可以减少任务完成时间,量化为物理量 \(a\text{ s} \cdot \text{mL}^{-1}\)。给定 \(n\) 个任务的 \(a_i\)、预计完成时间 \(b_i\)、期限时间 \(d_i\)。求使所有任务按时完成的最小某能量物质摄入量,保留两位小数。\(1\le n\le 2\cdot 10^5\)

注:某能量物质的摄入对任意任务完成时间的作用是同时的、普适的。(被坑)

Too easy. 但是坑太深了……

posted @ 2018-10-28 17:29  greyqz  阅读(234)  评论(0编辑  收藏  举报