![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
集训队暑假训练
gyr679
Jack of all trades and master of none
展开
-
G - Game Design题解
题目链接题目大意:一个球,从某一个位置开始滚动,当遇到木块时可以改变方向(上下左右),目标是滚动到(0,0),现给出一个解序列,要求构造一个匹配该解序列的迷宫。题目分析:此题设计较为巧妙,一开始感觉毫无头绪,构造迷宫主要要注意两点:1是保证球的滚动不会被之前设的木块所阻挡,2是保证球不会提前滚入(0,0)。我们可以采用一种比较巧妙的方法来构造迷宫,我们使球每次滚动到一个一个离原点逐渐远的框中,框与框的间隔为1个单位,这样,木块恰好被放到框与框之间的缝隙中,这也就保证了第一点。不过要注意如果相邻两个是L原创 2020-07-10 22:26:49 · 599 阅读 · 0 评论 -
B - Brexit Negotiations题解
题目链接题目大意:给出n个会议,每个会议都有一定时间,并且依赖于之前的会议(即必须在它依赖的会议进行完之后它才能进行),每次会议都需要对之前完成的每个会议画一分钟总结,求最长会议最短时间是多少。题目分析:对于依赖关系,首先想到拓扑排序,由于题目要最长的会议最短,那么应该先进行长的会议。此题如果正向建图的话会有因为先选了第一层一个较大的节点而导致最大的那个节点被安排到后面的情况。反向建图的话,我们每次选能选的最短的会议,那么较长的会议就不会因为贪心的策略而被先取了。就像正向建图无法保证最大的最先被取一样,原创 2020-07-10 22:00:17 · 628 阅读 · 0 评论 -
L - Lottery Tickets题解
题目链接题目大意:给出0-9每个数的个数,用这些数(不一定全用上)组成一个能被4整除的最大的数题目分析:枚举最后两位,对选择优先级排个序,然后逐一判断,简单暴力。代码:#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>//00 20 12 32 40//24 44 52 60 16 36 //64 56 72 76 80 //28 84 6原创 2020-07-10 21:47:41 · 260 阅读 · 0 评论 -
D - Disaster Recovery Gym - 102623D题解
题目链接题目大意:给出m条边,每条边的权值为两个节点编号对应斐波那契数列的值的和,求一个最小生成树,使得最大度数的节点的度数最小。题目分析:此题斐波那契数列作为边权,有很好的性质,首先任意两个斐波那契的和是唯一的,反证假如存在f[a] + f[b] = f[c] + f[d],不放设a < c < d < b,由于f[b] = f[b- 1] + f[b - 2],那么f[c] + f[d] <= f[b],由于f[a] > 0,所以等式不成立,所以结论得证。所以可以得到每原创 2020-07-10 21:40:52 · 161 阅读 · 0 评论 -
A - Archmage Gym - 102623A题解
题目链接题目大意:一个法师,有能量上限n,每回合可以花费x(如果有大于x的能量)的能量召唤一个水元素,每回合结束都会补充y的能量,但是最多就补到上限n,现在给出回合数,求他最多能召唤出多少水元素(一开始能量为n)题目分析:很容易看出贪心策略,即每回合如果能召唤水元素就召唤。但是如果单纯模拟会超时,所以要找到O(1)的解法。如果y大于等于x,那么每回合都可以召唤出水元素,答案就是回合数否则,题目中有个很好的性质n > x + y,如果当前回合可以召唤水元素,那么我花费x召唤水元素,再补充y的能量原创 2020-07-10 21:31:08 · 246 阅读 · 0 评论 -
I - Fast Race Gym - 102566I题解
题目链接题目大意:给出n辆车在一条直线上赛跑,给出起始位置和速度,求最后的排名和最后一次排名变动的时间。题目分析:最后的排名很容易求得,以速度为第一关键字,位置为第二关键字进行排序即可求得。对于最后一次排名变动的时间,有如下结论:对排序后的元素从前到后两两比较更新答案即可。证明:代码:#include <bits/stdc++.h>using namespace std;const int MAX_N = 1e5 + 5;struct node { int id, p, s;原创 2020-07-10 21:02:24 · 180 阅读 · 0 评论 -
F - Magic Wand Gym - 102566F题解
题目链接题目大意:给出一个序列,每次可以对连续的一段排序,花费序列长度的三次方,求使整个序列有序的最小花费。题目分析:不难发现一定是两两排序(即两两交换)花费最少,于是题目变为求这个序列的逆序数,使用归并排序来求即可。代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long ll;const int MAX_N = 1e原创 2020-07-10 21:13:03 · 172 阅读 · 0 评论 -
C - Emojis Gym - 102566C题解
题目地址题目大意:给出一个序列,求一个最长不下降序列使得夹在这个序列中间的数最少。例如序列3 5 2 7 4 11 10可以找到两个4长的不下降序列3 5 7 11和3 5 7 10,显然前者夹在这个序列中间的数更少,为2.题目分析:由于题目中N达到1e5,所以求最长不下降子序列要使用nlogn的方法,比较常用的就是贪心加二分法,这个题实际是考对这种方法的理解。我们在使用upper_bound进行求解的时候,用一个pos数组记录一下每个元素在dp数组中的放置记录,有了pos数组的帮助就可以方便求出原创 2020-07-10 20:44:20 · 141 阅读 · 0 评论