Regional 做题记录 (50/50)

写在前面

博主深感自己太弱了QAQ 于是有了一个刷水的想法,Regional的题目还是有很多考查思维的题目,所以这次是乱做50道思考题,可能会顺带做一些水题,这些题的简要题解会写到这篇博文里面,希望能与大家得到交流。(下次应该是TC做题记录)
做题OJ:UVALive

现在做了几题

思考题: 50
其他题: 123

Note:

  1. 7216 - Counting Partition 在 UVALive 上没有数据,程序正确性未知,但做法与官方相同。
  2. 7563 - Coprimes 在 UVALive 上的时限不对,题面中 A[i]A[i] 上界少个 0,程序会超时,在 codechef 上是单组数据 4 秒,可以通过。
  3. 暂无卡住的题目。

last update time: 2020-01-13
complete set count:

2015 : 6 / 39
2014 : 1 / 38
2013 : 2 / 36
2012 : 4 / 36
2011 : 2 / 35


Regional 2015

Asia - Amritapuri (10 / 10)

A - git 先对较高级的目录进行操作不会使解变差,记 f(i,0/1)f(i, 0/1) 表示以 ii 为根的子树是否在 ii 处进行了一次操作的情况下将整个子树的操作完成的最小代价进行 dp 即可
B - Circles and Squares 考虑每个方格会被圆覆盖多少面积,以及这个方格会被统计多少次即可,具体来说只需考虑其四个顶点是否有单位圆,只会有三种情况
C - Jump on Buildings 倒着跳更直观一点,令 f(i,j)f(i, j) 表示最后跳到的两个房子分别是 i,ji, j 时最多已经跳了多少个房子,如果端点高度相同则认为跳了 00 次,否则通过高度大小可以知道最后一个是哪个房子,所以可以直接约定 iji \leq j。比如说 Hi<HjH_i < H_j ,那么有 f(i,j)=maxik<j,Hi>Hkf(i,k)+1f(i, j) = \max_{i \leq k < j, H_i > H_k} {f(i, k)} + 1 ,看上去需要一个 log\log 级别的数据结构维护最大值,实际上只需要维护 maxik,Hi>Hkf(i,k)\max_{i \leq k, H_i > H_k}{f(i, k)} 即可,因为满足 Hi>HkH_i > H_k 则一定有 k<jk < j 。这样就可以 O(n2)O(n^2) 了。两个方向都维护一下就可以了
D - Magical Matrix 注意到每个子矩阵里至多包含 5 个大于 1 的元素,考虑分治,每次将矩阵切半递归求解,对于跨越切割线的情况,枚举答案矩阵在切割线上的投影区间,维护关于到切割线距离递增的区间乘积变化的位置,每次只会新增一行信息,其中有用的只有每个质因子距离切割线最近、次近的位置,将最近的位置排序后和之前的有序表合并,再进行与切割线平行的边界枚举即可,注意到每次切割最长的那条边不会使复杂度增大,且最坏情况是矩阵为方阵的情况,在这种情况下复杂度依然是 O(5nmlognm)O(5 n m \log n m)
E - Cat and Mouse 二分答案,变成二分图独立集问题,用最大匹配解决
F - Similar Strings 枚举核心串的长度再计算可能的有序组数发现答案是 x12625x1(nx)2\sum_{x \geq 1}{26 \cdot 25^{x - 1} {n \choose x}^2},随便算算
G - Chota Mouse and his Birthday Cake 小模拟
H - Longest Palindrome 除了最中间的串之外每组串两两对应,按照字典序构造前缀即可,中间串只能是自回文的串选一个
I - Coins 转化到权值上算个数,从而路径的贡献可以拆成子树的贡献,正常来说离线拿个线段树套可持久化权值线段树维护贡献就可以了,但是这题 nn 比较大,直接做大概需要 1GB 的内存,将操作与询问整体二分后可以去掉一个权值线段树,空间做到了线性,时间上多了一个 log\log 又少了一个 log\log ,所以变化不大
J - Coprimes 考虑容斥,所求即 dμ(d)(i=LR[dai]K)\sum_{d}{\mu(d){\sum_{i = L}^{R}{[d | a_i]} \choose K}},直接计算比较麻烦,考虑将 c(d)=i=LR[dai]c(d) = \sum_{i = L}^{R}{[d | a_i]} 相等的 dd 合并在一起计算,因为每个数至多只有 262^6 个无平方因子约数,所以 c(d)26(RL+1)\sum{c(d)} \leq 2^6 (R - L + 1),这意味着不同的 c(d)c(d) 至多只有 26(RL+1)\sqrt{2^6 (R - L + 1)} 种,因此只需要维护 s(v)=d[c(d)=v]μ(d)s(v) = \sum_{d}{[c(d) = v] \mu(d)} 非零的部分即可单次询问 O(n)O(\sqrt{n}),而维护 s(v)s(v) 和所涉及的 c(d)c(d) 则需要用莫队,每次 O(26)O(2^6) 添加/删除一个元素,总复杂度 O(26nn)O(2^6 n \sqrt{n}),由于莫队的信息只涉及加减和顺序扫数组的操作,所以跑得不慢

Asia - Changchun (13 / 13)

A - Too Rich 算反面,当货币成倍数关系时可以贪心,枚举不满足关系的两种货币奇偶性,然后转化为贪心
B - Count a × b 算反面,发现是积性函数,分解求即可
C - Play a game 满足ai>ai|a_i|>\sqrt{\sum{|a_i|}}的串数量少于ai\sqrt{\sum{|a_i|}},所以暴力计算子串合法匹配的复杂度可以做到O(Sai)O(|S|\sqrt{\sum{|a_i|}})(但是数据难以构造所以直接AC自动机暴力也可过),关于(长度,起始位置)的博弈dp可以压位并行,注意实现要cache friendly即可
D - Pipes selection 对序列分块,利用FFT计算一段ll与任意jj对应的rr数量,对于每个jj初步固定ll所在块编号,后枚举(l,r)(l,r)即可,块大小取knlog2(2s)k\sqrt{n\left\lceil\log_2(2s)\right\rceil},视代码效率自行调参数kk即可(我的kk居然选了100
E - Rebuild 本质为nn个方程,每个变量可以表示成某个变量的线性组合,对于nn为奇数的情况可以直接解方程检查,对于nn为偶数的情况可以求极值
F - Almost Sorted Array 简单模拟
G - Dancing Stars on Me 整点上的正多边形只有正方形
H - Partial Tree 假设每个点的度数为(1+xi)(1+x_i),则i=1nxi=n2\sum_{i=1}^{n}{x_i}=n-2,这种形式进行dp可以省去点数一维,从而O(n2)O(n^2)解决问题
I - Chess Puzzle 二分染色后将一边的点颜色视为取反,算反面求最小割,贪心确定每个点属于割的哪一边并产生影响
J - Chip Factory Trie上的简单模拟
K - Maximum Spanning Forest 关键点只有矩形的端点,其他部分的点加入到MST中的决策是唯一的,每次只需要对关键点的MST进行重构,由于有序表的合并是线性的,所以复杂度可以是O(n3α(n))O(n^3\alpha(n))
L - House Building 简单数学题
M - Security Corporation 由于每个点度数至多为4,故可以构造出使用至多3种颜色的方案:只有一个交点时1-染色;可以二分染色时2-染色;其他情况找出一条不与已知直线平行的轴线,沿轴线依次染色即可保证每个点只受至多2个点影响,从而3-染色

Asia - Dhaka (10 / 10)

A - Automatic Cheater Detection 枚举本质不同的情况计算答案
B - Counting Weekend Days 简单模拟
C - Toll Management IV 树边和树边的答案和树上路径更新、路径最大值有关,将路径更新按照权值升序进行更新,其中可以用并查集维护每个点到根路径上最深未被更新的点,使得每个点被更新至多一次
D - Owllen 只选一种字符组成TT是不会使解变差的,枚举选哪个字符即可
E - Sum of MSLCM 为保证和最大显然每个约数都要选,所以答案就是2到N的约数之和,分段求解即可
F - Unique Party 对于每个询问,将不小于hh的位置改为11,小于hh的位置改为1-1,所求即点数最多的一个元素之和非负的矩形区域,枚举矩形的上下边界转化为一维序列问题,求前缀和后可以发现一些左端点、右端点无用,去除后变为两个单调点列的问题, two pointer 求解即可
G - Honey King 六边形坐标系类似于欧式坐标系,可二分答案半径rr,转化为每个点向外扩张rr得到的正六边形求交集,交集里存在点则表示半径可行,可以将每个六边形化作六个半平面的交集,是关于x,y,x+yx,y,x+y的不等式,分别求交集之后合并是很简单的
H - Design New Capital 由于xy0xy\neq 0,所以只用考虑坐标的正负性,发现对角象限需要选相同数量的点,卷积一、二象限的点数即可得到答案
I - Numbered Cards 由于选中的集合里任意两个数不含相同的数位,那么每个数位最多出现在一个数字中,进行一些数位dp的预处理,然后暴力枚举数字集合的划分方案即可
J - The Hypnotic Spirals 极坐标积分,小情况讨论一下即可

Asia - EC Final (13 / 13)

A - Boxes and Balls 每次新加入的数字是之前的盒子数,且每个数减一都要在原来的局面中,故总盒子数为三角形数,解方程即可
B - Business Cycle 二分答案,模拟过程,不难证明除第一轮外之后每轮如果收益递增那么递增量是相同的,最大值一定在最后一轮操作内出现,否则最大值在第一轮操作内就出现了
C - Suffixes and Palindromes 思考saffix arraymanacher的过程,得到偏序关系然后构造
D - Change 反证法可得至多用两次 0.01 即可拼出所有钱币,对于 A 不是 B 的 2 倍且 B 是 0.01 或 0.1 或 1 或 10 的情况,需要两次
E - Colorful Floor 首先按行列划分等价类,行模i=gcd(x,n)i = \gcd(x, n)意义下同余且列模j=gcd(y,m)j = \gcd(y, m)意义下同余的等价类个数是lcm(i,j)\text{lcm}(i, j),数量是φ(i)φ(j)\varphi(i)\varphi(j),而此时染色是等价类到等价类的映射,为了保证映射是双射,可选颜色的阶必须整除lcm(i,j)\text{lcm}(i, j),先从nmnm的约数里找出可能是lcm(i,j)\text{lcm}(i, j)的数并计算(i,j)(i, j)产生的贡献,然后O(σ(nm)2)O(\sigma(nm)^2)计算这样的颜色有多少即可
F - Hungry Game of Ants 除了 k=nk=n 的情况,其他情况第 kk 个蚂蚁必须往左走,对于一开始往右走的蚂蚁,都可以认为是被往左走的蚂蚁吃掉了,最终只需要考虑往左走的蚂蚁变向后的合并,考虑前 ii 个蚂蚁被第 kk 个蚂蚁合并的方案数,当 i=ki = k 时只需要考虑第一次合并的情况,否则考虑之前合并可以由哪些已经合并的状态转移过来 dp 即可
G - Legacy of the Void 所求等价于计算第 kk 小数字大于等于 ii 的概率关于 i>0i > 0 的部分求和,则需要计算出一个数字大于等于 ii 的概率。枚举必选的根节点,子树问题可以转化为 dfs 序上的问题,从而使每次转移的次数变为常数,用点分治将选根节点的过程优化,则使 dp 的复杂度变为 O(i=1nwij0n2j)=O(ni=1nwi)O(\sum_{i = 1}^{n}{w_i} \sum_{j\geq 0}{\frac{n}{2^j}}) = O(n \sum_{i = 1}^{n}{w_i})。由于精度问题,计算结果时需要计算伯努利实验的概率,这里直接采用乘法而不是取 log\log 反而会得到较好的精度
H - Open Face Chinese Poker 预处理 (143)+(145){14 \choose 3} + {14 \choose 5} 种可能的手牌的牌型与得分, (145,5,3,1){14 \choose 5, 5, 3, 1} 枚举检查答案即可(可能的坑点有 Ace\text{Ace} 的多种取值与 33 张牌的 Three of a Kind\text{Three of a Kind} 得分)
I - Champions League 按照国家的顺序进行状压 DP, DP 的最大状态数取决于可行解的数量,从每个 level 看可以知道最大值不超过 (84)4{8 \choose 4}^4,预处理转移然后暴力模拟四层 level 的转移卡卡常数即可,一个有意思的卡常技巧是按照队伍数量降序处理答案,这样可以使尽量多的信息在前面状态不多时就被处理
J - Dome and Steles 考虑每个立方体外侧面到球心的距离,可以二分半径贪心放置每个立方体,但是贪心的顺序需要在二分前通过排序搞定
K - Convex Polyhedron 三维凸包最多有 2n42n-4 个面,用 O(n4)O(n^4) 的方法找出来即可,对于某个投影向量考虑每个面产生的贡献,其实是每个面朝外的法向量(乘以面积)与投影向量的点积取正值求和,那么只需要知道哪些面要用即可调整投影向量到最优方向,由于 nn 很小,随机选投影向量进行调整即可
L - Multiplication Table 如果没有数字那么直接有解,否则考虑其中一个数字的位置,枚举它的因子确定它的位置然后检查其他数字的位置是否正确即可,因为能够检查到至少两个数字的情况至多只有一种,复杂度是有保证的
M - November 11th 排个序按行扫一遍空挡即可

Asia - Jakarta (12 / 12)

A - Arithmetical CAPTCHA DFS三个符号是什么即可
B - Udin and Ucok 对SG找规律即可,开始存在特殊情况
C - Counting Partition 本质不同的划分数量减一之和是 O(nlogn)O(n \log n) 的,每次 O(logn)O(\log n) 二分到位置即可
D - An ICPC Problem without Statement 贪心调整,分正、零、负三种情况,分别构造最大值、任意值、最小值,注意细节
E - Awesome Cipher Machine 构造题,用最少的 (mi)(ni)\binom{m}{i} (n-i) 表示 kk 即可,其中 m=O(logk)m = O(\log k)
F - Problem on Group Trip 模拟运行过程即可
G - Dungeon Trap 最终答案退一步的情况如果不是一条路径则可以变成一条路径,利用最短路计算可能的路径减去路径最大值的最小值即可
H - Harvest Season 分别排序后每个机器至多接一段区间苹果,dp进行分配即可,转移类似求中位数
I - National Disaster 将二元组按距离排序,统计下前缀 1 的个数,枚举答案即可
J - Alien Abduction 3 构建两个NFA分别识别两种字符串及其变种串,bfs求两个NFA上状态能表示的最短、字典序最小串即可
K - Amplified Energy 显然备用的从大到小替换不会使解变差,记录替换次数,可以类似最大子段和实现一个dp
L - Summation and Divisor 随便搞一组解,其他解与这组解的差能表示成每一个序列里的数与对应数字做差的值的 01 线性组合,用所有可能的差值去和这组解求最大公约数即可

North America - East Central NA (9 / 9)

A - Being Solarly Systematic 解模线性方程组进行模拟,注意细节,例如时间的系数为0,时间的系数与模数不互质
B - Delete This! 离散化后枚举最终选框的行边界,two pointer选列边界,注意中心在屏幕外的黑图标必须移动
C - KenKen You Do It? 预处理一种数字能占的局面,然后状压dp,有点卡常数
D - Rings 从白格开始bfs即可
E - Squawk Virus 简单模拟
F - Transportation Delegation 每个运输公司拆点实现点流量限制,每个点可以向对应的运输公司连边,类似二分图建边求最大流即可
G - Tray Bien 视作整点障碍然后直接轮廓线dp(如果读错题那就是数据太水了)
H - Trick Shot 按照题目要求的物理模型检查即可,注意母球打到1号球之前不能使2号球移动
I - What’s on the Grille? 简单模拟


Regional 2014

Asia Jakarta (11 / 11)

A - Cluster Analysis 简单模拟
B - Body Building 简单模拟
C - Electric Bike 中规中矩的dp即可,注意实现要cache friendly
D - Kevin’s Problem 分两种情况讨论,计算组合数即可
E - Cutting Tree 并查集
F - Double Swords 首先选择必选的剑,然后考虑未满足的区间,需要每个区间至少包含一个选点,这可以在将区间包含的情况去除后two pointer扫一遍得出答案
G - Prime Switch 不大于n\sqrt{n}的素数枚举子集,结合大于的素数进行容斥
H - I Want That Cake 前缀和优化博弈过程
I - Maze Mayhem 轮廓线dp预处理,容斥算答案
J - Leveling Ground 单调栈
K - Punching Robot O((8K)2)O((8K)^2)的容斥dp

Europe - Central (1 / 12)

L - Outer space invaders 区间dp(数据水,可以剪枝)


Regional 2013

Latin America (10 / 10)

A - Attacking rooks 将行或列根据障碍分裂成多个点后二分图匹配
B - Blogger language 预处理出每个可以匹配的位置和相应的失配,每次的反转操作会使得一些点失配取反,剩下一小部分(前面和后面都有)进行暴力修改即可,需要记录区间最大最小值
C - Counting ones 按照二进制位由高到低统计的数位dp
D - Disjoint water supply 考虑如果一个点有两条路可以走到根,那么可以将它的入边切除,然后将和根相连的路切除,每个连通块都可以和之外的点凑成点对,于是按深度(标号升序)来检查即可,可以用并查集
E - Eleven 11的倍数满足奇数位之和与偶数位之和模11同余,利用dp预处理从nn个数里取出n+12\left\lfloor\frac{n+1}{2}\right\rfloor个数模值为kk的方案数,考虑最高位不是0和是0的方案即可
F - Football 简单贪心
G - Go up the ultras 单调栈
H - Hide and seek 扫描线的做法几乎是显然的,枚举seeker,维护一个极角向量扫一圈,扫的过程中利用set维护该方向上最近的线段(由于线段不相交所以任意时刻满足偏序关系),初始向量可以设一个没有点的方向,例如(1000001,-1),此外如果存在三点共线,可能需要改动扫描事件的顺序
I - Inverting Huffman 按贪心策略模拟
J - Join two kingdoms 树dp算出每个点在原树上的最远点距离以及两棵树的直径,方案的结果不是原直径就是两个最远点距离之和加1,把距离排序后two pointer走一走即可

North America - Greater NY (9 / 9)

A - Islands in the Data Stream 简单模拟
B - Von Neumann’s Fly 简单数学题
C - Strahler Order dfs
D - Pisano Periods 枚举或者大步小步(或者利用结论)
E - Deranged Exams 容斥
F - Chomp 记忆化搜索模拟博弈过程
G - Triangle Count Sequences of Polygon Triangulations 每次总有一个点只属于一个三角形(外缘的三角形),不断把它拿掉,模拟检查即可
H - Powers of Pascal 生成函数告诉我们答案是(nm)pnm\binom{n}{m}\cdot p^{n-m}
I - Contraband 拉格朗日条件极值


Regional 2012

Asia - Tokyo (10 / 10)

A - Ginkgo Numbers 预处理平方数,枚举约数统计答案
B - Stylish 枚举答案
C - One-Dimensional Cellular Automaton 矩阵乘法快速幂
D - Find the Outlier 高斯消元
E - Sliding Block Puzzle 显然两个空格到任意两个点的移动距离就等于它们分别到达其中一个点的最短距离,bfs出小状态之间的最短路,再求大状态之间的最短路
F - Never Wait for Weights 带权并查集
G - Let There Be Light 枚举产生贡献的灯,判断一下线段和圆是否相交
H - Company Organization 操作1,2,4之间不会产生影响,考虑它们对操作3,5产生的影响,二分答案后可以用偏序关系和子集的性质判定,细节需要想清楚
I - Beautiful Spacing 二分答案,计算一个有单调性的dp即可判定
J - Cubic Colonies 答案在展开图上必然是经过一些整点的折线,最优解最坏使用一个偏移为7的斜线(而非6或8),考虑将边的等分点拆出建边,直接跑最短路即可

Europe - Central (11 / 11)

A - Kingdoms 记忆化搜索模拟
B - Who wants to live forever? 观察一次操作后的效果,可以发现奇偶不同位独立,于是分治检查
C - Chemist’s vows dp(转移的表打得手疼)
D - Non-boring sequences 算反面,从两边同时开始找不合法的情况将序列分治检查,这样做类似启发式合并,复杂度可以证明是O(nlogn)O(n\log n)
E - Word equations 每个串贪心匹配,记忆化搜索实现串合并
F - Farm and factory 新图的最短路满足两组不等式,将最短路二元组为平面上的点,问题转化为最小曼哈顿距离和
G - Jewel heist 扫描线+set
H - Darts 简单模拟
I - The Dragon and the knights 设计一个hash函数使得不同区域的点的值不同,去重之后检查是否等于区域数即可
J - Conservation 拓扑序上的简单贪心
K - Graphic Madness 由必须要选的边扩展到两棵树的每条边是否要选,决策唯一,最后检查剩余边是否构成一个环即可

Latin America (10 / 10)

A - Arranging Heaps 斜率优化dp
B - Boxes and Stones 博弈过程是一个二进制数右移变成1的过程,转化为组合dp
C - Cellphone Typing Trie上走一走
D - Different Digits 简单模拟
E - Environment Protection 二分+自适应Simpson
F - Fix the Pond 除了起点终点外每个点度为2,每次操作只能减少一个连通块数,故答案为(连通块数-1),dfs即可
G - Game of Tiles 二分图匹配
H - Hours and Minutes 简单数学题
I - Interval Product 线段树
J - Joining Couples 基环树结构,并查集维护连通性,环直接维护,树维护lca

North America - East Central NA (9 / 9)

A - Babs’ Box Boutique 简单搜索
B - Flash Mob 简单数学
C - Hexagon Perplexagon 简单搜索
D - I’ve Got Your Back(gammon) 利用简单搜索预处理
E - Parencedence! 搜索模拟博弈过程
F - Road Series 答案不会很大,枚举长度不超过7的数字,模拟
G - Show Me the Money 答案不会很大,直接表示成分数,搜索
H - Sofa, So Good 题目保证解唯一,并且要求第一轮总代价最小,故直接二分图最小权匹配即可
I - Town Square 除水平放置外只有两种角度可能有解,分别检查即可(也可以枚举小角度区间,二分找到这个角度)

North America - Greater NY (9 / 10)

A - Hailstone HOTPO 记忆化搜索
B - B-Casting 求和即可
C - Pen Counts 显然是一个线性递推数列,解出递推式即可
D - Maximum Random Walk O(n3)O(n^3) 的 dp 写细致一点可以过(定义 f(i,j,k)f(i, j, k) 表示走 ii 步,最右到达 jj,当前离最右有 kk 步的概率),事实上可以用类似卡特兰数的组合数求出最右至多是 jj 的概率,这样就是 O(n2)O(n^2)
E - Faulhaber’s Triangle 答案不大,用带大数的语言根据题目给出的提示预处理即可
F - The King’s Ups and Downs 组合dp
G - Mad Veterinarian 注意到输入不超过 9,最坏情况下就是每个转移都要存一个右部的情况,所以每一维的值都不需要超过 36,在这样的解空间里 bfs 即可,输出需要注意下没有 spj 的问题
H - Windmill Animation 拿极角扫描线在每个轴点处暴力扫描即可
J - Mystery 观察输出找到题目需要干什么即可,注意使用 scanf 读入空白字符会读入所有的空白字符,而不只是一个换行符


Regional 2011

Asia - Kuala Lumpur (9 / 9)

A - Smooth Visualization 简单模拟
B - Arnooks’s Defensive Line cdq分治+树状数组
C - Equivalence 字符串模拟+随机化
D - Tree Inspections 离散化+扫描线
E - Social Holidaying 一般图匹配(数据水,可用二分图匹配)
F - Orienteering dp预处理分数对应的最短距离
G - Writings on the Wall Z Algorithm或者KMP或者字符串Hash
H - Robotic Traceur bfs求最短路
I - Shortest Leash 答案一定是极角序中连续的一段,由于可以选择向量的反向,将反向向量也加进去,限制不能选超过一半的向量即可

Latin America (11 / 11)

A - Army Buddies 两个方向分别用并查集维护即可
B - Ball Stacking 转45°变成矩阵形式,利用预处理信息快速维护后缀最值并DP
C - Candy’s Candy 本质不同的解一定可以表示成(每组数量, 复杂组数量),设每组的数量为mnm\cdot n,则有mnCiCjm\cdot n|C_i-C_j,当CiC_i不全相同时可以求相邻差值的最大公约数的因子做mnm\cdot n的倍数,当CiC_i完全相同时mCim|C_i,皆可枚举mm,计算对应的复杂组数量
D - Diccionário Portuñol 难点在于去重,对于后缀长度大于1的情况枚举前缀不包含的结尾字符作为后缀的开头即可
E - Electrical Pollution 将每个连通块里的点权用某个点权表示即可,注意输入格式到建边的转化
F - File Retrieval 考虑排序后一段公共前缀长度L\geq L的后缀集合,当LL变化时,只有LL到了某个heightheight或者某个后缀的长度时,后缀集合才会变化,因此答案的个数是O(n)O(n)的,可以枚举+二分检查
G - Garden Fence 最优解一定可以调整到直线与两个点十分相邻,枚举其中一个点,用两条相反方向的极角序扫描线走两圈即可
H - Hedge Mazes 路径唯一等价于只走桥边,求出桥后维护连通性即可
I - In Braille 简单模拟
J - Jupiter Atacks! 模数为质数,利用乘法逆元的知识发现树状数组维护一下就可以了
K - King’s Poker 简单模拟


Regional 2009

Asia - Amritapuri (1 / 10)

H - Find The Number 容斥

Asia - Harbin (1 / 11)

I - The Number of Sequence Pair 找规律之后递推,可以转为计算贡献


Regional 2008

Asia - Hefei

F - Programmers 问题模型为求解 circular-arc graph 的最大团,答案集合里一定存在不被其他元素严格包含的 arc,枚举这样的 arc 作为 base,去掉不相交或被它严格包含的 arc 不选,去掉非严格包含它或两端点都在它内部或边缘的 arc 必选,剩下的 arc 可以按照包含的端点分为两类,每一类的 arc 两两相交,此时考虑将 circle 关于 base 的一个端点切开,两类 arc 会分别变成区间、区间的补集,方便判断不相交关系,那么可以考虑先选中所有区间,然后从左往右扫描尝试把一些区间取消、一些区间补集选中,这里通过扫描线可以去掉右端点的影响,从而得到一个关于左端点的贪心替换方式,即区间补集能匹配则匹配最左未匹配区间,不能匹配则直接选中(并将一些匹配对进行替换),可以证明这样不会使解变差,从而得到最优解,直接做就是 O(n2logn)O(n^2 \log n) 的,可以通过


Regional 2007

Asia - Taipei (1 / 10)

C - Undetectable Tour 二分+并查集


Regional 2004

Europe - Southeastern (1 / 9)

B - Corporative Network 带权并查集


写在后面

智商,我要智商!QAQ

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值