ACM/ICPC 2014 广东现场赛复现
1011 How Many Maos Does the Guanxi Worth
题意
有N个点,要求去掉一个点使得不连通(输出Inf),如果不能做到则使得最短路径路径最长(输出该值)。
思路
裸的dijkstra,增加del[disable] = true
,在判断vis[j]的地方加上判断!del[j]。
由于删掉一个节点导致图可能不连通,因此注意红书模板mark==-1
的时候要直接return,外循环不要N次。
代码
1002 The E-Pang Palace
题意
有小于30个点,找出两个(必须是两个)不相邻、不相交的矩形。求面积并的最大值。
思路
用vector<int> corx,cory
记录出现过的坐标,并排序。用bool hit[x][y]
表示点(x, y)是否出现过。在corx和cory中枚举出x1, x2, y1, y2(x1 != x2, y1 != y2)。如果点(x1, y1)和点(x2, y2)存在,那么将矩形添加到vector<RECT> vecrect
中。
接着分别检测相交(矩形1有一个点在矩形2里面)、相邻(横坐标相等,一个矩形纵坐标左边在另一个矩形的两个纵坐标中间)。这里如果实现保证struct RECT
中x1 < x2 && y1 < y2
,会比较方便。
但是还是WA,后来发现矩形1在矩形2内也算对的。我觉得这就比较坑了,因为题意是圈地分封,如果两个矩形成包含关系怎么分封呢?
代码
1009 Little Zu Chongzhi’s Triangles
题意
有N个长度不等的线段,问能够组成的所有三角形最大面积和是多少,棒子不一定要全部用完。
思路
贪心(当然这条数据较小也可以暴力,复杂度(12,3)(9,3)(6,3))。每次取尽可能长的边。首先对数组a从小到大排序,如果a[i], a[i - 1], a[i - 2]能够组成三角形,那么加上这一组,如果不能,考虑a[i - 1], a[i - 2], a[i - 3](舍弃a[i]是因为根据两边之和大于第三边,a[i - 3]相对于a[i - 2]肯定更不可以了)。
证明:在HDU 5914上我们得到结论一个数列上任意三条边不构成当且仅当该序列是类斐波拉契数列的子数列。
代码
1005 Song Jiang’s Rank List
题意
给水浒英雄排座次,按杀人多少,杀人数相同按照名字字典序排列。阅读理解,水题。
代码