
湖南acm省赛
文章平均质量分 63
历年湖南程序设计竞赛
takyon69
这个作者很懒,什么都没留下…
展开
-
2017年湖南省第十三届大学生程序设计大赛 I 题 “Nearest Maintenance Point” CSG - 1109(最短路,dijkstra)
①所得新路径长度原创 2022-10-09 22:37:59 · 163 阅读 · 0 评论 -
2016年湖南省第十二届大学生程序设计大赛 题 “地铁” CSG - 1139(边到边最短路,dijkstra)
很明显是一个单源最短路的题目,但是如果是点到点的话,每次到达某个点所乘的轨道线编号可能不同,如果创一个不同轨道线到达点的最短路径数组的话大小就10^10了会爆,所以干脆就采用边到边的最短路,dijkstra里面堆里存的边代表着通过某条边号到达的该点。样例二:从1->n有两种路线 ①1->2->3 花费两条轨道时间1+1,以及从1号线换到2号线的时间1,总共时间3。给一个双向图,点是地铁站,边是轨道,每条边都有不同的轨道线编号,轨道往返所需时间一样。求从 1 号地铁站到 n 号地铁站的最短时间。原创 2022-10-09 22:13:35 · 168 阅读 · 0 评论 -
2016年湖南省第十二届大学生程序设计大赛 B题 “有向无环图” CSG - 1135(dfs,记忆化搜索,逆元)
给一个有向无环图,求 图中每个点到每个点的路径条数 * 起点的a值 * 终点的b值,结果模1e9+7。弄清dfs过程后,做法就显而易见了。b2=1,1到3,两条路径,2。b3=2,2到3,一条路径,1。1到2,一条路径,1。原创 2022-10-09 21:50:32 · 170 阅读 · 0 评论 -
2015年湖南省第十一届大学生程序设计大赛 E题 “简单的图论问题?” CSG - 1116(最短路,dijkstra,图论)
样例一:① 正常路线 10->3->6->14->8,值为41。② 转弯路线 10->3->6->2->6->14->8,值为49。② 若每一步不能与前一步的方向相同,也就是只能转弯或者后退,输出从这时从{r1,c1}到{r2,c2}最短路径。① 只能上下左右走,输出从{r1,c1}到{r2,c2}最短路径,路径长度就是所走格子的和。给一个n*m的矩阵,每一格要么是 * 代表障碍 ,要么是可走的1-100的整数。算是板子题,开始想的贪心,后来还是得弄四个方向的最短路才行。第一问直接dijkstra即可。原创 2022-10-09 21:20:19 · 157 阅读 · 0 评论 -
2011年湖南省第七届大学生程序设计大赛 C题 “多连块拼图” CSG - 1037 (搜索)
给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成。小多连块只能平移,不能旋转或者翻转。中间那幅图的问题在于其中一个小多连块旋转了,而右图更离谱:拼在一起的那两个多连块根本就不是那个给定的小多连块(给定的小多连块画在右下方)。要求第一个图是否涵盖第二个图,我们可以把第二个图的点记录一下,以最上面最左边的点为原点,把其他所有点的坐标与原点的差值存起来。搜第一个图时,找到一点后只用判断以该点为原点,其他加上差值的点是否符合条件就行,如果有一点不满足则不涵盖,所有点满足才涵盖。原创 2022-09-19 12:15:43 · 181 阅读 · 0 评论 -
2010年湖南省第六届大学生程序设计大赛 F题 “Biggest Number” CSG - 1051 // UVA 11882 (dfs+bfs+剪枝)
所以要来一次结果预判,首先可以判断接下来可能到达的数字个数,也就是dfs到某个点,再bfs一次得出可能到达的数字个数,然后还可以进一步对其进行一个降序排序,让其结果最大,然后将bfs可能得到的最大结果加上dfs已经得到的结果相结合,再与当前答案相比,若预判的最大结果还比答案小,则返回,完成剪枝。一个r行c列的矩阵,里面只有1-9的数字和‘#’,最开始可以随意挑选一个数字然后可以上下左右移动,问所走的路径所含数字最大为多少。很明显是个搜索题,虽然数据很小,但是dfs暴力还是会TLE,所以要想办法剪枝。原创 2022-09-05 14:33:13 · 307 阅读 · 0 评论 -
2012年湖南省第八届大学生程序设计大赛 F题 “Kingdoms ” CSG - 1062 (最小生成树,二进制枚举)
题目数据给的很有启发性,n最大为16。再将只含枚举点的边取出来,做最小生成树,求出建好该图的最小费用,然后和所给费用k比较,若小于等于则可行,将获得的价值与结果进行比较更新。给n个点和m条边,每个点都有价值ai,每条边费用为bi,现在给你k费用,让你建一个图,求该图中与1直接或间接相连的点的总价值最大为多少。题目要求的是与1直接或间接相连的点,所以最开始1必在所建图中,最后得出的最小生成树的点必等于边+1,不然则不是树,不全部相连。有时想不出来好的方案可以根据数据猜做法。原创 2022-09-19 13:13:44 · 104 阅读 · 0 评论 -
2010年湖南省第六届大学生程序设计大赛 G题 “Repairing a Road” CSG - 1052(floyd 求函数极限)
所以我们可以先把 t + vi * ai^(-t) 取最小值时的 t 求出来,然后再比较,若 t < dis[1][u],那么结果就为 dis[1][u] + res,所以要让res 尽可能地小, 所以 t 最大取 dis[1][u],若 t >= dis[1][u],则 t 即为 t + vi * ai^(-t) 取最小值时的 t。样例二: 因为只有一条边,所以时间为函数 t+vi * ai^(-t) 的最小值 (t为修补的时间,t>=0)原创 2022-09-06 16:15:59 · 294 阅读 · 0 评论 -
2011年湖南省第七届大学生程序设计大赛 F题 “打怪升级” CSG - 1040 (dfs,剪枝,暴力)
6个参数,表示当你的能力值为p1时,消灭这个怪物需要t1时间,能力值为p2时需要t2时间,p1原创 2022-09-19 12:45:05 · 107 阅读 · 0 评论 -
2012年湖南省第八届大学生程序设计大赛 I题 “Collecting Coins” CSG - 1065(搜索,bfs,dfs)
m的矩阵,‘S’是起始点,‘O’是箱子,‘C’是硬币,‘X’是障碍,‘.’是路,只能上下左右走,不可越界。*,方向为推的方向,推完一次后箱子就不能推了变成障碍,推完所处位置为箱子之前所在位置并且该店变成路。所有地图的状态存到一个队列,dfs来获取推一次箱子的新状态并存入队列,每次的状态都用bfs来获取能走到的硬币。由于箱子只能推一次,所以可以用dfs来遍历当前状态所有推箱子的情况,然后用bfs来收集能走到的点的硬币。知道能用bfs得到每个状态的硬币量后接下来就是找出所有推箱子的状态了。原创 2022-09-19 14:15:34 · 131 阅读 · 0 评论