一、训练赛情况
-
A.Two Rival Students(AC)(水题)
题意:
有长度为n的序列,有两个位置分别为a跟b的学生,他们有矛盾,现在你可以交换x次使得他们之间的距离最大,交换的人必须是位置相邻的。
思路:
看懂题目就会做了,直接按题目所说的模拟就可以 -
B.Minimize the Permutation(AC)
和昨天的B题一模一样…就不多说了 -
C.Dominated Subarray
题意:
给出一个序列,要求找出他的长度最小的区间,满足区间内有唯一的众数。
思路:
这个题比赛的时候想了好久还是没出来,之后一看题解发现自己想多了…其实区间出现最多的就是出现两个。因为不管出现多少个,要算这个区间的长度的时候,看的就是相同2个之间的距离,所以暴力枚举只要和上一个位置相比较,取最小的就ok,可以用map记录一下比较方便。 -
D.Yet Another Monster Killing Problem
题意:
题意:有n个怪兽,每个怪兽有个血量,再给出m个奥特曼,每个奥特曼两个属性攻击力跟耐久力,每天可以派一个奥特曼出战,能战胜怪兽的条件是其攻击力大于怪兽的血量,每消灭一个怪兽耐久力,就会减少一个,当耐久力为0或者怪兽被消灭完则退出战斗。
思路:
定义个d数组表示能攻击i天的最大攻击力。然后每次枚举能攻击的天数j,如果d[j]≥这j天的最大值则继续尝试增加天数,否则break。这个d数组的求法就是求个后缀最值就可以了,因为考虑个问题,如果能攻击i天的最大攻击力为j,那么j这个攻击力也一定能攻击i - 1天。 -
E.The Contest
题意:
分别给出长度为n,m,k的a,b,c的序列,序列中的元素为[1, n + m + k]的不同数字。每一次操作可以从一个序列中拿出一个数放到另一个序列,代价为1.问最少代价使得a序列的元素为1~n+m+k的一个前缀,c为一个后缀,b为中间一个序列。某个序列可以为空。
思路:
设d[i][j]表示第i个数字属于序列j的最小代价。
所以可以得出
再记录个vis数组,如果当前数字i属于第j个序列,d[i][j]–
最后取个min就行了 -
F.Make Them Similar
题意:
给出一个数组a,让你找到一个数字满足异或完每个数后得到的数相似.
思路:
相似的定义就是二进制位中1的个数相同, 这题可以折半枚举,先枚举答案的前15位,记录每个数字前15位异或完后含有多少多少个1,再枚举后十五位,每次枚举再枚举答案异或完这些数字后这些数字含有多少个1,再在枚举的前15位中查询是否有满足条件的输出即可,最后如果没有就是-1。
二、总结
今天这个比赛心态打崩了,B题想了好久也没想出来,看了看其他的题也没啥思路都没啥心情做下去了。就出了两道题,其中一道还是昨天的原题…有种越打越菜的感jio。调整了下心态,看了看题目有关的知识,位运算啥的。这一天就这么过去了。
明天继续!