
ACM
文章平均质量分 59
SofanHe
愿所有向往终成现实,时光不负努力的我们
展开
-
CCPC2020Weihai B. Labyrinth
Labyrinth 题目描述 n∗mn*mn∗m网格图,上面有kkk个黑洞,有q≤1e5q \leq 1e5q≤1e5个询问,每次问从一个点走到另一个点不能走黑洞的最短距离是多少。 思路 绝大多数情况下都是曼哈顿距离,只有当黑洞影响到正常的曼哈顿距离的时候才会考虑黑洞的存在,然后就判定有没有黑洞在矩形框里面即可。 当没有黑洞在里面的时候,直接输出曼哈顿距离。 当有黑洞在里面的时候,肯定最优方案蹭了黑洞的边。 那么就有聪明的小伙伴会问了,为啥啊? 因为黑洞如果没有阻碍正常的曼哈顿距离,那么一定有一种方案是原创 2021-01-17 17:24:04 · 327 阅读 · 0 评论 -
CCPC2020Weihai H Message Bomb
Message Bomb 题目简述 m个人n个群s个操作,群一开始都是空的,操作有以下三种: 有一个人x加入了群y,保证x在操作前不在y中。 有一个人x退出了群y,保证x在操作前在y中。 人x在群y中发送了一条消息,此时在y中除了x的人会收到一个消息。 求:每个人收到的消息数目。 解题思路 记录每个操作时候每个群的总消息数,然后利用退出时间和开始时间之间的群消息数差分计算收到的消息数。 也就是在加群的时候减去当前群里的消息总数,在退群的时候加上当前群里的消息总数。 但是此时会存在两个问题: 自己发的消原创 2021-01-17 17:07:23 · 266 阅读 · 0 评论 -
CCPC2020Weihai A Golden Spirit
CodeForces Link Golden Spirit 简述题意 有一个桥,桥两边各有n个old guys,每个old guy需要到桥对面relax一定时间然后回到原来的那一侧。你的任务就是帮助每一个old guy过桥,再等待他们relax完成之后送回来。 其中,帮助任何一个old guy过桥消耗ttt时间,每个人relax都需要花费xxx的时间。求最短的完成上述任务的时间。 思路 尽量不要让每一分钟闲着。 于是,在任务刚开始的时候,首先把old guy都扶到另一侧,这样在每一次从桥这边到桥那边的时候,原创 2021-01-17 16:52:56 · 282 阅读 · 0 评论 -
CCPC2019Final C Mr.Panda and Typewriter
Codeforces题目链接 问题重述 给定一个字符串S, 你要从一个空串打出字符串S. 你可以选用的三种操作如下: 花费X, 在已经打出的字符串后面打一个字符 花费Y, 复制已有的字符串中任意一个子串 花费Z, 把在剪切板的最后一个子串放到文末 求打出字符串S的最小代价. 动态规划 显然用DP. 但是需要记录什么状态? 最容易想到的状态必然是F[n][i][j]表示现在已经打了n个字符, 并且剪切板上的内容为S[i:j]. 这样的复杂度起码是n3的. 而且还会存在S[i:j]重复的情况. (字串相等)原创 2020-10-07 09:14:24 · 578 阅读 · 0 评论 -
2020HDU多校2 String Distance
题目链接 问题重述 给你一个长度在1e5之内的小写字符串A,和一个长度在20之内的小写字符串B。q(1e5)次询问,每次询问A[l…r]与B的编辑距离. 核心问题 如何求这个LCS? 才能做到稳定lenB2lenB^2lenB2的复杂度? 解决方案: 利用LCS向LIS的转化, 魔改一下, 然后求解. LCS转LIS 利用F[i][j]表示A[i…lenA], 中j+'a’字符出现的最靠前的位置. 可以通过O(NC)求出来. 然后利用 DP[i][j] = pos, 维护 B[1…i]中, 长度为j的LCS原创 2020-09-28 08:50:02 · 203 阅读 · 0 评论 -
2020HDU多校2 In Search of Gold
原题链接 问题重述 给你一个无向树,其中每条边有AB两种边权。给定一个k**k≤20k\leq 20k≤20**,让你选k条边权值为A,剩下的边权值为B,最小化该条件下的树的直径。 问题分析 树的直径两种求法 两次BFS可以找到树的直径, 基于规则是图没有变化, 显然这个题目中不太适用. 一次DP可以找到树的直径, 并且DP方程是每次处理一个子树 ( 感觉可以为我所用? ) 然后就选了一次DP来求解. DP讲解 讲真当时做这个题没看到k≤20k\leq 20k≤20的条件, 不然还有可能冲出来? 一看这原创 2020-09-28 07:15:24 · 197 阅读 · 0 评论 -
2019CCPCQHD Angle Beats
原题链接 题目来源:CCPC2019 秦皇岛站 A题 问题重述 给定二维平面上nnn个点,然后给出q次询问,每次询问给出一个点P(n+q个点都不同),询问P和之前的n个点能构成多少个直角三角形。 其中0≤n,q≤2000;∣x∣,∣y∣≤1e90 \leq n,q \leq 2000; |x|,|y|\leq 1e90≤n,q≤2000;∣x∣,∣y∣≤1e9 问题分析 假设存在两个点A,B跟这次的这个P构成了直角三角形, 那么可以得到以下的式子: {Py−AyPx−Ax⋅Py−ByPx−Bx=−1,P是顶原创 2020-09-23 17:46:34 · 297 阅读 · 0 评论 -
CCPC2019QHD Forest Program
题目链接 2019CCPC秦皇岛赛站题目 问题重述 给你一个由仙人掌树构成的图G,求G有多少种删边方案能使其成为森林。 计数算法 区分边为环上边和非环上边 环上边至少删掉一个,剩下的随意。长度为 L 的环对答案贡献2L−12^L - 12L−1 非环上边,可删可不删,那就是2m−∑L2^{m-\sum L}2m−∑L 然后这个题就完事了。判断环就用类似于Tarjan的那种方法,dep改一下就行了。 哦对了,这个2的次方需要提前处理出来。 代码 #include<bits/stdc++.h>原创 2020-09-22 23:22:05 · 795 阅读 · 0 评论