日常训练
2018 IME Tryouts
ABDFHIJK 签到
C 暴力dfs
E
upsolved
分别考虑每种进攻, 对应位看成$1$, 其余位看成$0$, 那么假设以$x$开头, 有效次数就为$\sum\limits_{i=x}^{x+n-1}a_i b_{i-x}$ 差为定值, 把$b$翻转一下然后$FFT$即可
G 相当于要动态维护互素对数, 假设添加$x$, 那么互素个数增加
$\sum\limits_{i=1}^{N} {cnt}_i [gcd(i,x)=1]=\sum\limits_{d|x}\sum\limits_{i=1}^N[d|x]{cnt}_i$
动态维护$f(d)=\sum\limits_{i=1}^N[d|i]{cnt}_i$即可
2018 ICPC Asia Jakarta Regional Contest
AIL 签到
B
C. Smart Thief
upsolved
可以发现最小值是$N+K-1$, 并且合法方案非常多. 直接暴力$dfs$, 用$hash$判重
D. Icy Land
特判$n,m\le 2$, 否则中间必须全为#, 四周至少一块#
E
F. Popping Balloons
upsolved
对于一个气球, 只能影响序列$B$中的一个后缀, 选其中最大的$B_i$一定最优
G. Go Make It Complete
每次取$deg$和最大的边删除更新答案, $O(N^4)$可过
H. Lexical Sign Sequence
先初始化全$1$, 然后从左到右贪心替换. 用堆+扫描线判断是否可以替换
J. Lie Detector
暴力预处理出所有子串, 然后DP即可
K. Boomerangs
原题CF860D
NCPC 2016
AFGJ 签到
B. Bless You Autocorrect!
upsolved
建trie, bfs求出每个点最小花费即可
C. Card Hand Sorting 暴力枚举最终排列, 贡献为$n-LCS$
D. Daydreaming Stockbroker 每个波谷处买, 波峰处卖
E. Exponial 拓展欧拉板子
H. Highest Tower
upsolved
题目等价于可以交换长宽, 使得最终每块对于一个矩形宽不相同, 长的和尽量大.
对于一个矩形, 连边$(s,t)$, 就等价于给$n$条边定向, 使得每个点出度为$1$, 入度乘点权尽量大
一个连通块只能是环套树或树, 分别统计一下最大值即可
I
K.
2014 ACM-ICPC Vietnam National First Round
ABDGIJ 签到
C. Grid city
upsolved
每个询问找到最接近的$8$条线, $64$个交点跑$floyd$
E. Binary Search Tree
对于点$x$的左儿子, 暴力向右遍历找到第一个权值不少于$x$的点减掉, 右儿子同理, 复杂度是$O(n)$
F
H
Radewoosh+mnbvmar Contest
A. Alakazam
每次操作相当于把区间赋值为平均数, 用并查集或者线段树合并区间即可
J. Jigglypuff
如果存在$s_{x,y}$和$s_{x+1,y-1}$相同, 那么经过这两个点能构造出$2$条路径
找到两个这样的结构即可构造出$3$条路径
K. Kecleon
upsolved
对于静态问题, 可以用$Z$算法线性求出. 动态问题可以每隔$\sqrt{q}$个询问暴力重构$Z$函数, 那么每次询问额外的贡献只有后面$\sqrt{q}$个字符, 暴力枚举每个字符, 用$hash$判断是否匹配, 总复杂度$O(q\sqrt{q})$
ICPC Latin American Regional Contests 2019
EIKM 签到
D. Dazzling Stars
upsloved
每个点向权值大的点连边, 那么直线只能在最大夹角的补角范围内, 把每个点确定的补角求交, 若不少于$\pi$, 则合法
F. Fabricating Sculptures
upsolved
设$f_{x,y}$表示共$x$块,摆$y$列的方案, 考虑从下往上枚举每行摆放
就有$f_{x,y}=f_{x-y,y}+2f_{x-y,y-1}+...+yf_{x-y,1}$ 可以前缀优化, 复杂度$O(B^2)$
G. Gluing Pictures
所有串连起来求$SA$, 把前$n$个位置的$rk$扔进$vector$里, 对于一个询问, 每次二分出两个最接近的$rk$, 匹配一段$lcp$即可
L. Leverage MDT
枚举每一列, 对于每一行连续同色的都换成$G$, 单调栈统计最大值
2019-2020 ACM-ICPC Pacific Northwest Regional Contest
CDE 签到
A. Radio Prize
第$i$个点的答案为$\sum\limits_{j=1}^n (a_i+a_j)(d_i+d_j-2d_{lca(i,j)})$
预处理前缀和可以$O(1)$算出$\sum\limits_{j=1}^n (a_i+a_j)(d_i+d_j)$
对于$lca$的贡献, 考虑点$i$到根的一条边$(u,v,w)$, 贡献为$-2w({sz}_{v}a_i+{sum}_{v})$
$a_x$为$x$点权, ${sz}_x$为$x$子树的大小, ${sum}_x$为$x$子树内点权和
预处理$sz,sum$, 然后$dfs$一次就完了
B. Perfect Flush
贪心, 用堆维护未使用元素位置最大值的最小值$x$, 假设上一个数位置为$pre$, 那么在$[pre+1,x]$中选一个最小的数即可
F. Carny Magician
upsolved
假设已经确定一个前缀$[1,i]$, 那么后缀方案$[i+1,n]$只与剩余$\ge i+1$的数的个数和剩余不动点数有关
设${dp}_{n,x,y}$为长$n$的排列, 只有$x$个数在$[1,n]$范围内, 不动点数为$y$的方案
那么有
${dp}_{n,x,0}=(x-1)({dp}_{n-2,x-2,0}+{dp}_{n-1,x-1,0})+(n-x)({dp}_{n-2,j-1,0}+{dp}_{n-1,j,0})$
${dp}_{n,x,y}=\binom{x}{y}{dp}_{n-y,x-y,0}$
然后就可以$O(n^2)$递推出第$k$大
G. Glow, Little Pixel, Glow
H. Pivoting Points
I. Error Correction
可以互相转换的两个串连边, 可以发现最后得到一个二分图, 求出最大独立集即可
J. Interstellar Travel
K. Computer Cache
L. Carry Cam Failure
从低位到高位搜, 每次分支最多为$2$, 复杂度是$O(2^{\frac{n}{2}})$
M. Maze Connect
每个小三角看成一格, 等价于求最小生成树, 枚举每个障碍点用并查集合并即可
ICPC 2019-2020 North-Western Russia Regional Contest
AM 签到
B. Bad Treap
upsolved
找一个sin尽量小的位置, 每次加710, 这样sin一定是递增的
D. Double Palindrome
upsolved
首先可以求出长$n$的所有串的双回文划分数$R(n)=\sum\limits_{i=0}k^{\lceil\frac{i}{2}\rceil}k^{\lceil\frac{n-i}{2}\rceil}$
然后有一个结论是对于一个双回文串$s$, 假设最小整周期为$t$, 那么双回文划分数为$\frac{|s|}{t}$
就可以得到长$n$的本原双回文串个数$C(n)=R(n)-\sum\limits_{l|n\wedge l<n}\frac{n}{l}C(l)$
那么答案就为$\sum\limits_{i=1}^n\sum\limits_{j|i}C(j)$
E. Equidistant
检验一下点集直径的中点即可
H. High Load Database
upsolved
对于每个询问$t$, 暴力二分, 复杂度是$O(\log n\sum a/t)$, 每个$t$的答案记忆化一下, 总复杂度就为$O(\sum a\log n\log \sum a)$
I. Ideal Pyramid
二分高度, 那么对于每个柱子限制金字塔中心在一个正方形范围内, 若正方形交集非空则合法
J. Just the Last Digit
假设$[1,i]$已经确定完毕, 对于新添一个点$i+1$, $i$到$i+1$方案只能为$0$或$1$, 可以判断出是否有边, 然后就可以递推出$i-1,...,1$是否与$i+1$连边
K. King's Children
upsolved
先用单调栈求出$A$的最大矩形, 然后从上到下从左到右遍历每个城堡, 先贪心向左右分配, 然后往上下分配
但这样可能会被$A$的区域卡住, 导致一些位置没覆盖到
一个解决方案是按照$A$所占的列, 分成三个矩形, 分别处理每个矩形即可
NWERC 2018
HIK 签到
B. Brexit Negotiations
等价于让权值大的尽量靠前, 建反图, 求出字典序最小方案, 然后翻转一下即可
C. Circuit Board Design
upsolved
$\frac{\pi}{2}$分成$n$份, 按$dfs$序, 把每个点分一个角度
E. Equality Control
预处理出每个左括号对应右括号位置, 然后按题意模拟即可
G
JAG Practice Contest for ACM-ICPC Asia Regional 2016
AB 签到
C. We Don't Wanna Work!
每个人离散化, 用线段树求第$k$大和排名即可
D. Parentheses
暴力找规律
E. Similarity of Subtrees
每个子树hash一下
F. Escape from the Hell
枚举最后一天喝的饮料, 前几天饮料一定是按$a-b$降序喝
可以二分出最早爬出的天数, 检验一下是否每天高度都大于$c_i$的和即可
K.
2019-2020 ICPC Asia Taipei-Hsinchu Regional Contest
CDKHJ 签到
A 暴力$bfs$
E 原题CF1129B
M
可以转化为求$M!$除去素因子$p$后模$p^x$, 最后再$crt$合并答案即可
SWERC 2019
ABCFI 签到
D
upsolved
初始化长$1e4$的序列, 分别用两个串操作一下, 看最终每个位置的值是否相同
合并的话就新建一个点, 维护左右儿子, 扔进map<pair<int,int>,int>里即可
E
upsolved
假设$n\le m$, 设$x_0=A_{0,0},...,x_{n-1}=A_{n-1,0}$, 递推到第$m-1$列, 可以得到一个方程组
高斯消元解一下即可, 复杂度是$O(nm\cdot min(n,m)+\frac{min(n,m)^3}{\omega})$
G 建图求最小拓扑序
H
upsolved
有循环节, 可以分块打表
J 一段区间$[L,R]$内, 假设最小值出现次数为$cnt$, 那么贡献为$Catalan(cnt)$乘上去除最小值后区间的贡献
K
upsolved
先把点$T$拆掉, 然后$tarjan$缩点. 对于每个强连通分量, 如果连向$T$的边数为$1$, 并且后继不能到达$T$, 那么合法
L
upsolved
每个湿地连通块可以单独处理, 标记一下附近的硬地, 然后每个硬地连通块大小不超过$18$, 可以暴力状压求出$SG$值. 若异或非零先手赢, 否则后手赢
NWERC 2019
CEFI 签到
A. Average Rank
维护$rk_i$表示得分为$i$时的排名, 那么初始$rk_i$全$1$. 第$x$个人加分就等价于$++rk[c_x++]$
所以每个$rk_i$随时间变化是阶梯形的, 每个人的得分等价于要在阶梯形中区间求和, 用扫描线即可
B.
D.
G. Gnoll Hypothesis
可以发现$k$固定时, 每个$i$对$s_i,s_{i+1},s_{i+2},...$贡献比例是一样的, 可以$O(N^2)$预处理出来
H. Height Profile
upsolved
等价于求$(a_i-a_j)/(i-j)\ge 10g$的最大$i-j$, 枚举$i$, 就要求$a_i-10gi\ge a_j-10gj$的最小$j$, 可以二分单调栈求出
因为答案可能是浮点, 每次求出一段区间后, 再往左或右延伸一段即可
J. Jackdaws And Crows
upsolved
$a_i$修改到正数需要$max(0,1-a_i)$个小号,修改到负数需要$max(0,1+a_i)$个小号
对修改次数排序, 建一棵线段树, 节点$[l,r]$维护矩阵$a_{0/1,0/1}$表示$[l,r]$区间开头是否为正数结尾是否为正数时最小删除数
这样复杂度就为$O(nlogn)$
K.
2019 ICPC Universidad Nacional de Colombia Programming Contest
BIK 签到
D. Do Not Try This Problem
$k<3000$时, 直接暴力
否则$a$一定不超过$34$, 维护set<int> f[35][35]表示每个模$a$剩余系的下标, 暴力删除
这样复杂度就是$O(34n\log{n}+q(3000+\log{n}))$
F. Fraction Formula
先预处理出每个左括号对应右括号位置, 然后dfs模拟即可, 相加时分母要取$lcm$不然会爆long long
G. Graduation
考虑贪心, 一定让深度最大的点尽量靠前, 转化为求反图最小拓扑序
J. Jail Destruction
线段树维护每个区间最小值, 每次区间减$k$, 若最小值不少于$k$直接减, 否则递归到叶子暴力减, 减到$0$时权值修改到无穷, 这样复杂度就是$O((n+q)\log{n})$
L. Liquid X
先$dp$求出能达到的所有权值, 然后二分答案, 如果程序输出yellow直接结束, 否则可以求出能构成的最小区间, 若区间长度为$1$, 那么输出答案, 否则一定不能判断
2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest
CDG 签到
A. Flying Squirrel
upsolved
如果$x,y$高度相等, 或者$x,y$中间最大值超过$max(H_x,H_y)$那么无解
每个点$i$, 向左右最高度低于$H_i$且最高的点连边, 这样就得到一个$DAG$
如果有解的话, 那么两个点的答案也就是两个点在$DAG$中的深度之差
B. Grid Coloring
upsolved
首先可以发现最大值就为$min(nm,max(0,n-k+1)m+max(0,m-k+1)n)$
假设$n\le m$, 如果$n<k$, 答案就为$\binom{m}{k-1}^n$
若$(n-k+1)m+(m-k+1)n\ge nm$, 那么每个格子都能涂到, 答案就为$1$
否则的话$n,m$的范围会很小, 可以考虑暴力打表
一种思路是把$(n-k+1)m+(m-k+1)n$个位置提取出来, 暴力$dfs$每个位置选的点, 但这样$n=4,m\ge 8,k=4$时就很难跑动
还有一种思路是, 可以发现没覆盖到的点会很少, 只有不超过$8$个, 可以暴力枚举没覆盖到的位置, 建图跑最大流, 若最大流等于$(n-k+1)m+(m-k+1)n$则合法
E. How Many Groups
先排序, 然后预处理出初始分组情况, 修改时要么合并连续两个组, 要么合并连续三个组, 暴力讨论即可
F. Lucky Pascal Triangle
upsolved
根据lucas定理可以知道$\binom{n}{m}\equiv \prod \binom{n_i}{m_i} (mod \space 7)$, $n_i,m_i$为$7$进制第$i$位
所以就等价于求$i,j(0\le i\le j\le n)$满足$i$的$7$进制某位大于$j$的方案数, 可以数位dp求出
H. As Rich as Crassus
暴力可过
I.
J. Floating-Point Hazard
upsolved
用导数近似即可
K. The Stream of Corning 2
upsolved
离线扫描线即可
L. Largest Allowed Area
预处理出二维前缀和, 枚举每个点为右下角, 暴力判断当前答案是否能变大
SEERC 2018
B. Broken Watch
upsloved
$n$为偶数时, 固定点$A$, 枚举点$B$, 答案为$n(2+3+...+\frac{n}{2}+n-2+\frac{n}{2}+...+3+2)$
$n$为奇数时, 答案为$n(1+2+...+\lfloor\frac{n}{2}\rfloor+\lfloor\frac{n}{2}\rfloor+...+2+1)$
若三个长度相同要除以$6$, 两个相同除以$2$
C. Tree
枚举每个点$bfs$, 取满$m$个点后停止, 然后暴力算出点集直径, 复杂度是$O(N^3)$
D. Space Station
upsolved
E. Fishermen
位置$(x,y)$的鱼只对$[x-l+y,x+l-y]$有贡献, 扫描线即可
F. Min Max Convert
upsolved
假设$a_x=b_y$, 那么只要将$[x,y-1]$改为同色, 然后对$[x,y]$操作即可
考虑枚举$b$中元素, 在$a$中找到对应元素, 需要保证$a$中对应位置是非降的, 不能保证的话就无解
对于连的每条边要么左偏, 要么右偏, 先从左到右处理左偏的, 再从右到左处理右偏的, 这样可以让每个操作都不相交
G. Matrix Queries
upsolved
可以发现如果递归过程中一共遇到$x$个异色矩阵, 那么答案就为$4x+1$
所以用线段树维护行列每个层数同色块数即可
H. Modern Djinn
upsolved
随机给每个点赋权, 直到合法边不少于$m/4+1$为止
I. Inversion
先$O(n^3)$恢复出原排列, 然后考虑区间$DP$
设$f_{i,j,k}$表示区间$[i,j]$只考虑权值不超过$k$的点的方案
考虑从大到小枚举当前区间取的最大数$a_x$, 假设比$a_x$大的数最大位置为$pre$
如果$x>pre$, 那么$x$右侧点和$x$左侧比$x$大的点都被$x$支配, 那么贡献加上$f_{i,x-1,a_x-1}$
如果$x<pre$, 那么$x$右侧比$x$大的点无法处理, 无贡献
所以可以发现合法状态只有$O(n^2)$个, 总复杂度就为$O(n^3)$
K. Points and Rectangles
$t$时刻添加一个矩形, 就对$[t,q]$时刻加上当前矩形内的点数
$t$时刻添加一个点, 就对$[t,q]$时刻加上当前包含该点的矩形数
可以用$CDQ$分治解决
SEERC 2019
A
upsolved
考虑全变为$x$的答案, 如果不存在$x$的话, 那么一定无解
如果存在$x$的话, 那么一定有解, 把$x$看做$0$, $>x$的看做$1$, $<x$的看做$-1$
对于一段长$L$的$-1,1$交替序列额外贡献为$\lfloor\frac{L}{2}\rfloor$
可以用线段树解决, 复杂度是$O((n+m)\log {n})$
B 按$x$从小到大排序, 然后$dp$即可
C
D
假设所有字符出现最大次数为$mx$, 那么$mx\le \frac{n}{2}$一定有解
然后考虑$n-mx$的值, $n-mx$为$0$那么无解
$n-mx$为$1$, 只有$n=2$有解
$n-mx$为$2$, 只有当另外两个字符不同时有解
$n-mx\ge 3$时一定有解
E
按年龄降序排列, 先特判全开摩托的情况
然后枚举开车人数$i$, 那么$[1,i]$开车, $[max(i+1,n-(k-1)i+1),n]$坐车, $[i+1,max(i,n-(k-1)i)]$开摩托
预处理每个前缀开车,开摩托,坐车所需转移年龄和最大转移年龄即可
F
upsolved
每个点向所有祖先连边, 若有完美匹配, 那么后手必胜, 因为每步操作只需走对应匹配即可
若没有完美匹配, 先手必胜, 先手只需选择一个未匹配点开局然后仿照后手必胜操作
G 独立考虑每层即可
H
I 简单签到
J
考虑每个点的贡献, 权值排序后两两结合即可