7月30号 Codeforces Round #500 题目链接:http://codeforces.com/contest/1013
A - Piles With Stones
过水,不说。
B - And
思路: 首先可以发现答案只能是-1,0,1,2,所以我们一个一个判断。如果已经有重复元素,答案就是0;如果与x后有重复元素,答案就是1;如果两个元素与x后相等,答案就是2;其余的情况答案就是-1。然后就是一些细节注意处理。
代码:
1 |
|
C - Photo of The Sky
思路: 蛮神奇的一题。我们可以先将这些坐标排序,并将它们分为两类,横坐标集合与纵坐标集合。可以发现横坐标集合一定是连续的n个,如果你随意交换一对使它不连续,那么纵坐标的极差不变,很坐标的极差增大了,而答案就是两个极差之积。
代码:
1 |
|
D - Chemical table
思路: 首先用类似于连二分图的方法连边,把行和列作为节点。那么可以发现,我们要做的就是使整个图变为一个联通块。于是我们可以统计联通块个数,每加一个点就相当于连一条边,所以我们只需要加联通块个数-1个点就好了。
代码:
1 |
|
E - Hills
思路: 就是一个DP,首先我们设$f[i][j][k]$为第i个位置,建了j座房子所花的代价,$k$表示在位置$i$有没有建房子。然后我可以把位置$i$造房子的代价拆成两个:把左边变的更低的代价$l[i]$,把右边变得更低的代价$r[i]$。
然后就按照DP来,转移方程就看代码吧(懒得写了)。其中有一些细节要注意:如果两座房子中间之隔了一个,那么前一座房子的代价$r[i]$与这一座房子的代价$l[i]$有重合,于是我们特别地把这时的代价记为$val$,于是转移时还要特别考虑这个情况。
代码:
1 |
|