Codeforces #332 div2

代码:

https://github.com/HarryGuo2012/ACMCode/tree/worldLine/Codeforces/%23332(Div%202)

Patrick and Shopping

题意:

现在有三个点三条边构成的图,问你从一个点出发访问完另外两个点,再回到当前点的最短路是多少。

题解:

四种情况,讨论讨论就好。

Spongebob and Joke

题意:

现在给你一个映射表,并给你映射后的集合,问你能否得出映射前的集合,是否有多解。

题解:

就瞎比搞搞就好,由于原来的集合保存的是位置的信息,所以把映射表的位置和值反过来存,然后讨论一下就好。不过要注意无解的优先级要高于多解。

Day at the Beach

题意:

给你一个序列,问你最多能将这个序列分成多少个连续的块,使得每个块中排序后,整个序列是有序的。

题解:

这题我们使用贪心的想法,从左往右扫,如果当前能够分,那就分。而能分的前提条件就是当前前缀的最大值小于等于当前后缀的最小值。

Spongebob and Squares

题意:

给你一个$x$,问你有多少组$n,m$使得,以$n*m$构成的长方形中,恰有$x$个正方形。

题解:

令$f(n,m)$为以$n,m$为边长的长方形中正方形的个数。
那么令$n\leqslant m$
$$f(n,m)=\sum_{k=1}^{n}(n-k+1)(m-k+1)$$
展开整理得:
$$f(n,m)=(n^2+n)m+n^2+n+\sum_{k=1}^{n}-(n+m+2)k+k^2$$
收拢整理得:
$$f(n,m)=(\frac{n^2}{2}+\frac{n}{2})m+n^2+n-\frac{(n+2)(n+1)n}{2}+\frac{n(n+1)(n+2)}{6}$$
然后发现这是$m$的一次方程,由于有$n$的三次方项,所以可以通过枚举$n$的方式来计数,不过枚举的上限要仔细计算,不然会挂(我就是这么挂的!悲剧!)