sdnu2020WinterContest3rd题解报告
sdnu2020WinterContest-3 题解报告
这次的榜单和预想 偏差较大
好多模拟,暴力没人做, 果然暴力, 模拟这些体力活没人愿意干
由于uva的本体问题,有四道题变成了oi赛制,
A: hud-1364
tag: dfs, dp, 暴力
题意:Tom 抓 Jerry, 他只大概记得他怎么走的,问你可能的出发点, 给出了地图,和走的每一步的最小步数和最大步数和方向
题解:
1 | Q: 那我怎么办嘛 |
这题挺暴力,简单的,是根据训练计划出的中等题,大家弃a题不顾的行为令人心寒
dfs就不说了,直接搞, 判断就行
dp的时候设dp[s][i][j], s为第s步,i, j为坐标,转移方程为dp[s - 1][i][j] = dp[s][x][y]能否到达,怎么判呢,暴力啊2333,注意反向就行。 这题就是告诉你们, dp,就是暴力 (误
dp :
1 | /************************************************************************* |
dfs:
1 | /************************************************************************* |
B: CodeForces - 1242B
tag: 最小生成树, 贪心
题意:给你一个有m条权值为1的无向边的完全图,问你得到的最小生成树的权值为多少
题解:贪心想来,肯定是能用权值为0的边我就用,权值为0用着不吃亏嘛。
那么对那m条边的端点,将他能用0边到达的点都和他缩在一块
在对缩完的点进行用1边连接,所以答案为缩完后的点数减一
1 | Q: 什么是最小生成树,什么是完全图,什么是blabla |
或者找我深入♂交流
1 | /************************************************************************* |
C: UVA - 12879
tag:fft, 生成函数
题意: 给你n个不同数字,问你能组成多少个给定数字
题解:设 \(ax^i\) a为这个数字出现了几次,i为这个数字,将数据全整理成了这样子后,让他自己乘自己
\[ \sum_{i=0}^n{a x^i} * \sum_{i=0}^n{b x^i} \]
你会发现指数相加后,如果系数不为0,就能组成,而如何处理多项式乘法呢?就是fft的事情了
1 | Q: 师哥,我好喜欢fft, 我想学 |
1 | /************************************************************************* |
D: UVA - 806
tag: 模拟,暴力
题意:让在四分树和矩阵表达之间转换
题解:按题意模拟即可,注意输出数字时每十二个一行,和全为1时的处理
1 | Q: 我不会大模拟怎么办 |
1 | /************************************************************************* |
E: CodeForces - 489C
tag: 构造 贪心
题意:让你给出m位,每位数字和为s所能组成的最大值和最小值
题解:可以直接贪,首先考虑-1 -1 的情况,只有s大于了9 * m, 或者s等于0,但m却不等于0的情况,最小肯定最大位至少放一,然后从后往前贪,尽量放满后面,最大从前往后贪,尽量放满前面
可以每位每位构造,也可以直接构造,最小就在最高位为一的情况上加,最小就在m+1位为1的情况向下减,
1 | Q: what are you talking about? |
1 | m, s = map(int, input().split()) |
F: POJ - 1364
tag: 差分约束系统
题意:给你m个约束条件,问你是否合情合理
题解:是否记起了1st的l题?各位补过题的有福了,这又是一道差分约束系统,太棒了,根据题意建图,跑bellman-Ford判负环即可
1 | Q: 我不会差分约束系统怎么办 |
1 | /************************************************************************* |
G: CodeForces - 787D
tag: 最短路 线段树
题意:给你三种单向边
点到点 u -> v
点到区间 v -> [l, r]
区间到点 [l, r] -> v
让你找从s点到其他所有点的最短路
题解:建立两颗线段树,连边的时候就从第一棵线段树连到第二棵线段树, 第一颗线段树向上走无花费, 第二棵向下走无花费,第二棵再将叶子节点连向第一颗的叶子节点
如此建图,建完后在这张图上跑最短路即可
1 | Q: 我不会... |
1 | /************************************************************************* |
H: UVA - 12118
tag: 欧拉路 贪心
题意:在权值为t的完全图上,让你一定要走e条边,问你最少花费
题解:对这e条边,如果其中几条在一个联通块内,那么最优策略就是只走这些边一次
也就是一条欧拉路,对于不是欧拉路的情况,我们通过加边来使他变成欧拉道路即可, 每加一条边能消去两个奇数点
对于两个联通块之间,我们通过一条边来连接
所以,花费为 e + 为达成欧拉路加的边 + 连接联通块的边 的数量 乘 t
1 | Q: 欧拉路是啥? |
1 | /************************************************************************* |
I: CodeForces - 479C
tag: 贪心
题意:给你n场考试,每场你可在ai或bi中选一天考,其中ai > bi, 问你如何打破a的递增且考完考试的天数最小
题解:按a递增排序后,能在第b天考就在第b天考
1 | Q: 我能早点考试吗? |
1 | ans = 0 |
J: UVA - 10410
tag: dfs 模拟
题意:给你一颗树的bfs序和dfs序,保证为字典序最小,让你重建这棵树
题解:以dfs序为主递归遍历重建,用dfs序来检测两节点是否在同一层
1 | Q: 师哥师哥,我会dfs和模拟但我不会这个 |
1 | /************************************************************************* |
K: HYSBZ - 1036
tag: 树链剖分 线段树
题意:中文题面, 就是带修改地问你树上两点之间的最大值和两点之间的和
题解:树剖经典题。
我们用重链剖分整棵树后,用线段树log(n)维护树上信息
并利用树剖在链上进行跳转查询
1 | /************************************************************************* |
L: HYSBZ - 1935
tag: 离线 cdp
题意:中文题面 给你树的坐标,和m个二维询问
题解:可以加一维时间,转换为三维偏序问题, 询问离线下来,cdq分治第二维,树状数组维护第三维, 稍微注意下cdp细节处理
也可以离线下来,离散下,容斥乱搞
这儿是cdq分治做的,另一种可询@The_Flash
1 | /************************************************************************* |
M: CodeForces - 50A
tag: 思维 水题
题意:让你用1 * 2的砖去铺n * m的地板
题解: n * m只要有两个格子有空闲就能塞下一个1 * 2,所以直接输出n * m / 2即可
1 | n, m = map(int, input().split()) |
各位, 补题,做自己不会的题,才能有效提升自身能力, 慎记,慎记
有不明了之处,欢迎来讨论