Problem4278--5

4278: 5

Time Limit: 1.000 Sec  Memory Limit: 128 MB
Submit: 4  Solved: 0
[Submit] [Status] [Web Board] [Creator:]

Description

T1 逃生游戏(escape)

本题关键点在于选定x后,x±1都会被删除。那么部分分显然是从大到小扫一遍,模拟即可,这样就可以通过ai独一无二时的测试点。

ai不是独一无二时,就要另想做法了。其实我们很容易就能发现,题意就是当x取的时候x+1一定不取,那么也就是当x-1取的时候x一定不取。所以我们可以考虑 dp 做:用fi,0表示不取第i个元素,fi,1表示取第i个元素。那么fi,0的值就是fi-1,0fi-1,1中的最大值,fi,1就是fi-1,0+ai



T2 房屋装饰(house





本题是一道分类讨论题。题目大意是要求改动不超过两个元素,使得原序列回文并且字典序最小。那么我们分成几种情况(下面定义一组为对称的两个元素):

第一种:需要修改两组,那么我们只需要找到这两组元素,把字典序较大的元素改成字典序较小的元素即可。记录下改动次数。否则需要写一个 return,容易漏掉,所以建议记录下来。

第二种:需要修改一组,那么把两个元素都改成 1,因为有可能有一个元素为 1,所以需要记录下改动次数。

第三种:要满足条件,一组也不用修改,那么找到第一个不为 1 的元素,将这个元素和与其对称的元素都改为 1。这里不需要记录改动次数,可以反证:假设改完还有至少一次机会,那么我们肯定只改了一个元素,那么两个元素中至少有一个为 1,既然这个序列是回文的,那么这两个元素肯定都是 1,与找到该元素不为 1 相矛盾。所以无需记录。为了减少代码量,这一种我们和下文的修改次数放在一起。

修改完之后,我们看一看还剩下多少次机会没有用掉。如果还剩两次,就按第三种方法做,如果还剩一次,那么我们看一看  是不是奇数,如果是,就把中间的元素改为

T3 恶作剧(joke

本题可以利用单调性做。我们可以发现,当k 增加时,x/k 单调递减,那么可以二分答案。注意一个坑点:当不需要魔法时,输出 0。那么写一个特判即可。时间复杂度O(nlogn)瓶颈在于排序。

数字切割(number

本题是一道搜索题。看到数据范围不大,我们就可以考虑 dfs 枚举二进制位,然后暴力求和并判重。注意枚举时要把n 的十进制位逐位分离并用栈进行反转,判重可以写一个 hash,也可以使用 STL 的 map 或 set(






Source/Category

 

[Submit] [Status]