日常训练

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

每个点向所有祖先连边, 若有完美匹配, 那么后手必胜, 因为每步操作只需走对应匹配即可

若没有完美匹配, 先手必胜, 先手只需选择一个未匹配点开局然后仿照后手必胜操作

独立考虑每层即可

H

简单签到

J

考虑每个点的贡献, 权值排序后两两结合即可

 

posted @ 2020-06-11 01:21  dz8gk0j  阅读(474)  评论(0编辑  收藏  举报