- 博客(11)
- 收藏
- 关注
原创 俱乐部训练题11
这个问题还是比较简单的,用dfs(x,y)表示从(x,y)开始的点到终点的路径数,注意最后的结果可能很大,因此开longlong,当时我找了半天没看到ans还是int。用到了优先队列,把队列中的数据按照将被完成的时间从小到大排序,因此就可以模拟按时间顺序完成任务了。先找到必胜点,必胜点以外的就是必败点;这期主要用到了记忆化dfs和优先队列。
2023-12-20 09:31:33
390
1
原创 俱乐部训练题10
只要保证存在n个黑格子满足任意两个格子的行和列分别不同即可,如果采用dfs(step)的方式会超时,将表格转化为二分图用匈牙利算法有更好的效率;利用并查集来做,不需要关注那个监狱,只需要关注是否存在两个犯人在同一个监狱。二分图最大匹配问题的匈牙利算法。
2023-12-17 20:35:16
351
1
原创 俱乐部训练题8
这是使用了优先队列,这里注意,这里if(dist[y]>dist[x]+e[i].dis)的大括号包住了下面的q.push,其实,无论包不包住q.push都是合理的,因为这是优先队列,如果就按原来的代码来,在第一个点s遍历了它的所有终点后,选出来的第二个点是第一近点,第一近点再遍历它所有的终点,如果第二近点是由s直接到的,那么就算第二次遍历的时候不把这个点push到队列里也没事,因为在第一次遍历的时候已经放进去了,如果第二近点是由s到第一近点再到的,那么两种写法都会将这个点push进来。
2023-12-09 17:22:17
913
原创 俱乐部训练题7
这里采用dfs做法,注意dfs函数里的i前面需要加上int,i不能作为全局变量,否则会出现很奇怪的问题,包括dfs函数for循环每一个循环都无法运行到最后一步,如果注意不到是i作了全局变量的原因,将会一直离谱地错下去,那将会很折磨人。注意输入的时候一个数字一个数字的输入,因此应该定义字符型变量而不是整型变量。需要注意,回溯部分不能把某一格所在的整行整列两个对角线都初始化为0,这个题和上一个一样,需要注意变量定义的位置,
2023-11-21 22:39:27
48
1
原创 俱乐部训练题6
我一开始写的时候没有这么想,我想的是按照输入的顺序,第一个球心坐标放到队列里,再把所有其他的没有被选中过的坐标也放进去,每次放进队列的操作使当前被选中的两个坐标所表示的球的最上面的点与最下面的点的大小更新,并保存都到这两个坐标里,也就是收如果有几个球连在一起,那么它们所表示的最上面点的最大值就是这几个球最上面的点的最大值,最小值同理。然而应该注意的是,有可能一堆球连接在一起,另外一堆球也连接在一起,但是这两堆球没有任何通道联系,所以没办法就让上面的操作重复n次。
2023-11-15 16:55:04
52
原创 俱乐部训练题5
这个代码用到了背包的算法,这道题容易出现的问题在于超时,在输入两个时间的时候,用这里的方式可以通过,但是如果创造字符串变量,输入两个字符串,然后根据小时数是一位数还是两位数分类,将小时数和分钟数分别转化为int型变量,最后算出来t分钟,这样的作法会导致超时。这道题明显的背包问题,每件物品的价值和成本相等,注意到最后的总价值是有限制的,不能超过背包容量,但是就算忘了这一点也可以通过,因为只要在某一时刻之前的成本和价值没有超过,按照状态转移方程,任何时候都不会超过。上一道题的弱化版,同样的道理。
2023-11-07 13:12:30
43
原创 俱乐部训练题4
这个代码很垃圾只能说,输入数据的时候用这个代码里的就好,评测的时候末尾有终止符可以结束输入的,之前用cin.get()然后就错了,不知道为什么,大概是因为linux对cin.get()不太友好吧,这里最重要的是组合数的运算方式,用递推算组合数可以算出来很多,但是单纯用组合数的公式的话算不了多少,这道题的数据范围是过不去的,注意c函数的终止条件。这个题思路对了才能快速做出来,这种讨论方式我当时就感觉还是挺神奇(shit)的,dp的经典题目,顺便把做题时的心态写进了代码里/doge。
2023-11-02 21:43:31
50
原创 俱乐部训练题3
这个问题考虑到进栈和出栈的次数相同,都为n,而且任何时候出栈的次数都小于等于进栈的次数,于是可以在坐标系中以(0,0)为定点画一个由边长为1的正方形组成的正方形方格及其对角线(0,0)(n,n),考虑从(0,0)到(n,n)不越过对角线,而且只能往上走或是往右走的路径数,这路径数就是答案,路径数是卡塔兰数。明显的递推,注意到递推公式中加上1,
2023-10-25 21:28:05
51
1
原创 俱乐部训练题2
只要分析出来这些人打水的顺序,先让耗时少的打, 那么就没什么问题了。需要考虑全面才能作对,不妨就从最左边的牌开始一直往右分析。这个题目用的是典型的贪心算法,找结束时间最早的就行。
2023-10-17 20:39:36
55
原创 俱乐部训练题1
先排序,然后求出输入的数列各项的差值数列,求这个差值数列的各项最大公因数即可,这道题需要注意的地方是它的特殊情况,当这对数里有两个相同的数的时候,这个数列是常数列,那么一开始在过程中用到的除以公差的运算就不能再用了,数据量较大,尝试减少不必要的反复运行过程,对数列排序可以做到这一点,运用了结构体的形式,在排序完之后可以再回到原来的顺序,因为最后结果要按照输入的顺序输出。这个题我最后还是没有做出来,时间超了三倍,怎么改也超时,下面的这个是转载的。采用了快速幂运算,这里用上了递归的方法,
2023-10-15 22:19:06
56
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人