| 序号 | 题目 | Solved | Attempted | 类型 | 补题 |
|---|---|---|---|---|---|
| A | Tokitsukaze and Rescue | / | Sstee1XD | DFS+Dijkstra | Sstee1XD、lllllan |
| B | Blow up the Enemy | Sstee1XD | / | 思维 | lllllan |
| C | Contest of Rope Pulling | / | / | ||
| D | Deliver the Cake | / | lllllan | 拆点建图+Dijkstra | lllllan |
| E | Equal Sentences | Sstee1XD | / | 基础DP | lllllan |
| F | Go Running | / | / | ||
| G | Kindergarten Physics | lllllan | / | 输入输出 | |
| H | Last Problem | / | Sstee1XD | ||
| I | Tetrahedron | / | / | ||
| J | Paperfolding | / | / |
A - Tokitsukaze and Rescue
题意: 给你一张所有点互相直接连通的图,可以炸掉k条边,问你最长的最短路径长度。
题解: 由于所有点都是直接连通的,直接用二维数组存就行了,训练时用链式一直T。方法是dfs,每层进行一次dij,记录每次路径,然后枚举炸掉的路径。(之前写的时候dij还放在了循环了,下次要引起注意。
Sstee1XD
1 |
|
lllllan
1 |
|
B - Blow up the Enemy
题意: 张三和父亲玩fps,每个人开始有100生命值,可以拿一种武器,每次开枪可以扣对方生命值,每次间隔时间开枪,若对手生命值降到0及以下时自己生命值大于0,则获胜,若同时降到0及以下,则各有50%概率获胜。父亲每次随机拿,问张三获胜概率。
题解: 刚开始读错题意,卡了一会儿,后面就发现是个水题。只要把每把武器能获胜的时间记录下来sort一下,遍历一遍就行了。
Sstee1XD
1 |
|
lllllan
1 |
|
D - Deliver the Cake
题意: n个城市m条边,要求手里拿着蛋糕从城市s到达城市t。限制条件为,每条城市有个方向属性:LRM,如果是属性为L,则必须左手拿蛋糕,如果属性M,则左右手都行;可以在任何位置执行换手操作,需要花费时间x。求最短路。
题解: 本来天真地直接在dijkstra的函数里动手脚,琢磨了好久都觉得写的非常完美,:),WA了,无数遍。
拆点建图
后来补题学习了隔壁队wmh哥哥的思路,dijkstra的函数不变,原模原样地跑。改变存图方式,读入某条边的时候,如果明确两端的城市的方向属性不同,则直接给这条边的权值加上换手时间x。如果其中一段的城市的方向属性为中性的M,则新建一个点,原来的点可以设其方向属性为左,新建的点设其方向属性为右,然后分别建这两条边。说起来很晦涩,直接上图:
其核心思想就是就是让方向属性中性的城市,一分为二,变成两个带有具体方向属性的城市,然后分别去计算。至于点的编号,则需要作一些小改动,可以把整体的编号乘2,比如编号1的点,其左方向属性的点编号为1 << 1 = 2,其右方向属性的点编号为1 << 1 | 1 = 3。往后所有的点编号同理。最后将起点的两个下属编号与编号0相连,终点的两个下属编号与编号1相连。跑一遍dijkstra的模板求点0到点1的距离。
采用链式前向星存图,但也要分类讨论,判断某条边两端的方向属性如何,于是···出现又长又丑的代码。我用hand[]数组来记录每个点的方向属性,读入每条边的时候判断两端的方向属性,然后建立新的点,然后存图。光光存图就用了二十几行代码,直接看吐。
后期的整理归类之后,形成了最后的代码:
AC代码
1 |
|
E - Equal Sentences
题意: 给你一句由英文单词构成的句子,问你最多有几种类似的句子。这里的类似指任意位置上的单词与原句的距离差不超过1,即可以交换相邻的单词,但只能每个单词最多只能交换一次。
题解: 上午写的时候一直没读懂题意,读懂了之后很快就想到了是一个很简单的dp。我们从前往后看,若当前位置的单词与前面的相同,则它们交换与否对答案不造成影响,所以 = 。如果不相同,则他们可以进行交换,则 = + 。
Sstee1XD
1 |
|
lllllan
1 |
|
G - Kindergarten Physics
题意: (其实我是没有看懂的)随便扔两个公式感受一下
F = G ⋅ m1 · m2 / m2
G = 6.67430 × 10-11 m3 / (kg ⋅ s2)
题解: 其实不用其实不用,公式里的达到了10-11 恐怖精确度,但是题目的输出只要求10-6 ,所以,所以这题,就是简单的输入输出:)
AC代码
1 |
|