
OI题解
文章平均质量分 82
学信息竞赛时,重要题目的题解
CaptainHarryChen
I solemnly swear that I am up to no good.
展开
-
【BOI2019-Day1T2】Alpine valley(DP+倍增)
题目大意在山谷中有N个村庄,有N-1条道路将村庄连成一棵树,每条道路有一定长度。第E号村庄为山谷的出口。有S个村庄中有商店,商店可提供补给。由于山谷中天气恶劣,一条道路会被封死。当你处于某一个村庄中时,得知一条道路已经封死,你想知道自己能否活下去,即对于每一个询问,你需要计算,你是否能走出山谷,如果不能走出,则计算到最近的商店获得补给品所需最短路程。输入第一行:N,S,Q,E,即 村庄数,...原创 2019-06-18 21:38:13 · 429 阅读 · 0 评论 -
【AtCoder2000】Leftmost Ball (DP+组合数)
题意Snuke喜欢五颜六色的球。他总共有N×K个球,有N种颜色,每种颜色的球有K个。颜色编号为1到N。他将按照任意顺序排列所有球。然后,对于每种颜色,他将该颜色的最左边的球涂成颜色0,颜色0不同于N种原始颜色中的任何颜色。如将球排列为(1,2,1,2),染色后就变为 (0,0,1,2)。 所有操作后,球的颜色序列有多少种,求这个方案数mod 10^9+7。题解发现一个性质:对任何前缀...原创 2018-09-17 10:43:28 · 332 阅读 · 0 评论 -
【AtCoder1998】Stamp Rally(整体二分+并查集)
题意我们有一个N (3<=N<=10^5)个结点和M(N−1≤M≤10^5)个边的无向图。 结点编号为1到N,边编号为1到M。边i连接结点ai和bi。保证图连通。在这张图上,Q(1≤Q≤10^5)对兄弟正在参加一项名为Stamp Rally的活动。 第i对Stamp Rally如下: 一个兄弟从结点xi开始,另一个从结点yi开始。(1≤xi < yi≤N) 两个兄弟沿着边...原创 2018-09-17 10:35:17 · 541 阅读 · 0 评论 -
【AtCoder1980】Mysterious Light(数学模拟)
题意有一个边长为 N(2<=N<=10^12)的由镜子组成的等边三角形,设结点为a,b,c,从ab上取一点p,使得ap=X(1<=X<=N-1),从p水平向右发射一条神秘光线,经过若干次反射,回到p点。这条神秘光线有一个特点,他会在他走过的路径留下一条反射镜(光线会被自己走过的路线反射),求最后回到p点时,光线移动的距离。 题解发现光线总是在一个平行四边形里走...原创 2018-09-17 10:26:59 · 368 阅读 · 0 评论 -
【NOIP2016 D1T3】换教室(期望DP+Floyd)(究极思维陷阱!)
题目大意给出一幅 v 个点的无向图,表示教室及其连边。 有 n 个时刻,每个时刻正常要到教室 c[i] 上课,如果该时刻有申请更换,则到教室 d[i] 上课。 你只能在一切开始之前提交申请,且最多申请换 m 个时刻。第 i 个时刻申请成功的概率为 k[i]。 求移动路程的期望最小值。题解首先用floyd把任意两点 定义dp[i][j][0/1]为从第i个时刻之后开始,...原创 2018-09-12 19:47:20 · 235 阅读 · 0 评论 -
【CodeForces1019E】Raining season(边分治+斜率优化)
题目大意有n个结点的一棵树,每条边有两个权值a,b,第t天经过第i条边花费时间ait+bait+ba_it+b,给定m,求t=0,1,2...m−1t=0,1,2...m−1t=0,1,2...m-1时,最长的路径长度。题解简介边分治类似点分治选择重心,边分治选择一条边,把树分成两边,使得两边的点数最接近。 但对普通的树进行边分治容易退化,如下面这种图会退化为O(n)O(n)O(...原创 2018-08-19 20:42:03 · 1332 阅读 · 0 评论 -
【HDU6357】Hills And Valleys(DP)
题意给定一个数组,元素均在[0,9],可以翻转一段区间,求最长不下降子序列题解很巧妙的DP原创 2018-08-18 21:15:31 · 290 阅读 · 0 评论 -
【POJ3691】DNA repair (AC自动机+DP)
题意给定N个模式字符串,和一个匹配串,要求匹配串中不出现任何一个模式串,最少修改几个字母? (字符串中只有’A’、’C’、’G’、’T’,修改操作也只能修改成这四个字母)题解简单的AC自动机+DP,适合作为模板题(不知道这中算法的人)首先想到的就是最暴力的DP就是:dp[i][j]表示当前在第i位,第i位为j字符时,最少需要修改多少次,每次转移到i就必须检查i之前的若干位是否为模...原创 2018-08-11 11:37:12 · 501 阅读 · 0 评论 -
【CodeFoces1008D】Pave the Parallelepiped
题目大意有一个A×B×CA×B×CA \times B \times C的长方体,将其分为a×b×ca×b×ca \times b \times c的小长方体若干块,且a≤b≤ca≤b≤ca\leq b\leq c,这样的(a,b,c)(a,b,c)(a,b,c)有多少组?题解及找有多少组(a,b,c)(a,b,c)(a,b,c),使得这三个数中,一个为A的因数,另外有一个为B的因数,...原创 2018-07-14 16:40:21 · 790 阅读 · 5 评论 -
【UVALive4671】K-neighbor substrings (FFT+Hash)
题目大意定义两个相同长度的字符串距离为,这两个串对应位置字符不同的个数。 给定两个只有’a’和’b’的字符串A和B,A比B长,求A有多少子串,与B的距离小于等于K,重复的串不计。题解如果我们把’a’记为1,’b’记为-1,如将样例1aabbab ab记为 A[ ]=1, 1,-1,-1,1,-1 B[ ]=1,-1 则A[i]*B[i]=1(A与B第i位相同) 或 ...原创 2018-06-25 13:41:28 · 312 阅读 · 0 评论 -
【CodeForces840C】On the Bench(容斥、DP)
题目大意m(1≤m≤300)m(1≤m≤300)m(1\leq m \leq 300)个数ai(1≤ai≤109)ai(1≤ai≤109)a_i(1\leq a_i \leq 10^9),求有多少个排列(每个数都不相同,即使它们值一样),满足相邻两个数相乘的积不为完全平方数。题解将每个aiaia_i的平方因子全部除掉,剩下的数转换为一个经典问题: 有n1n1n_1个a1a1a_1...原创 2018-05-01 12:07:25 · 361 阅读 · 0 评论 -
【AGC022 B】【AtCoder3947】GCD Sequence
题目大意给定NNN(3≤N≤200003≤N≤200003\leq N\leq 20000),构造一个长度为NNN的序列,使得其中每个数aiaia_i,1≤ai≤300001≤ai≤300001\leq a_i \leq 30000,gcd(a1,a2,a3...an)=1gcd(a1,a2,a3...an)=1gcd(a_1,a_2,a_3...a_n)= 1,gcd(ai,∑nj=1,j≠...原创 2018-04-07 08:38:10 · 511 阅读 · 0 评论 -
【CodeChef RNG】Random Number Generator(多项式取模优化常系数线性递推)
题目大意给定数组AAA的前KKK位,和一个KKK位的数组CCC(1≤K≤300001≤K≤300001\leq K\leq 30000), Ai=∑j=1KAi−j×CjAi=∑j=1KAi−j×CjA_i=\sum_{j=1}^K A_{i-j}\times C_j 求ANANA_N(1≤N≤10181≤N≤10181\leq N\leq 10^{18})。subtask 1: 1≤...原创 2018-04-04 07:57:40 · 868 阅读 · 0 评论 -
【AtCoder3913】【Peterzavodsk Contest 001 F】XOR Tree(状压DP)
看了别人的题解,想了半天,我决定把它解释清楚一些。题目大意有N(2≤N≤105)N(2≤N≤105)N(2\leq N\leq10^5)个点的树,树边有权值a(0≤a≤15)a(0≤a≤15)a(0\leq a \leq 15),每次操作可以把树上一条路径上所有边异或一个任意值www,最少多少次操作可以使所有边权都变为000。题解用V[u]V[u]V[u]表示把结点uuu的所有边的...原创 2018-03-24 16:28:21 · 383 阅读 · 0 评论 -
【AtCoder3910】【Peterzavodsk Contest 001 C】Vacant Seat(二分)
头一次过交互题。题目大意有N(3≤N≤99999,N为奇数)N(3≤N≤99999,N为奇数)N(3\leq N\leq99999,N为奇数)个座位排成一个圈,有男的和女的坐在上面,同性的人不能靠在一起,因为NNN为奇数,所以总共只会留一个空位。有202020次查询机会,返回这个座位的人性别,找出空位的位置。题解如果正常坐位,必然是“男女男女……”,奇偶性相同的地方性别相同。 有...原创 2018-03-24 15:56:46 · 222 阅读 · 0 评论 -
排列问题(DP)
题意长度为N的排列是一个序列(a,a,...,a)(a,a,...,a)(a , a , ..., a ),恰好包含从111到NNN的每一个数字。例如,(3,1,4,5,2)(3,1,4,5,2)(3, 1, 4, 5, 2)是 一个长度为5的排列。 对于两个排列a和b,定义 magic(a,b)=max(a,b)+max(a,b)+...+max(a,b)magic(a,b)=max(...原创 2018-03-12 09:39:12 · 1273 阅读 · 0 评论 -
【BZOJ2693】jzptab(莫比乌斯反演)(数学)
题目大意:求∑i=1n∑j=1mlcm(i,j)∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^n\sum_{j=1}^mlcm(i,j) n,m≤10000000n,m≤10000000n,m≤10000000 多组数据 T<=T<=Tans=∑d=1min(n,m)d×f(⌊nd⌋,⌊md⌋,1)ans=∑d=1min(n,m)d×f(⌊nd⌋,⌊md⌋,1)an...原创 2017-07-12 15:36:49 · 408 阅读 · 0 评论 -
【AtCoder2304】Cleaning
题意一棵树有n个节点,节点i有A[i]个石头。将石头全部移除。对于每次移除石头的操作,选择两个叶子节点(u,v)(u不能等于v),移除u到v路径上的每一个节点的一块石头(包括u,v).注意:如果这条路径上有一个节点没有石头,则不能进行操作.(此处的叶子节点为度数为1的节点)能否通过上述操作将树上的石头移完.题解寻找一个度数大于1的结点为根,dfs下去,每次返回,这棵子树上还需多少次操作...原创 2018-09-25 19:11:21 · 254 阅读 · 0 评论 -
【AtCoder2376】Black and White Tree(博弈)
题意A和B轮流给树上的结点染色,A每次选择没染过的点染成白色,B每次选择没染过的点染成黑色,最后若所有白色都与黑色相邻,则B胜,否则A胜。双方以最优策略,求A胜还是B胜。题解A首先选择叶子结点的父亲u,则B只能选择叶子结点(否则叶子节点染白后,永远不可能与黑色相邻),所以,如果存在u有两个以上叶子结点,则A胜;然后删去u,则u的父亲v,如果v没有了子节点,v就成为新的叶子结点,A可继续先前...原创 2018-09-30 21:46:22 · 300 阅读 · 0 评论 -
【AtCoder2305】Decrementing(博弈)
题意黑板上有n个数,它们的最大公约数为1.于是A和B决定玩一个游戏,两个人轮流进行操作,A先手。从黑板上的数选择一个不小于2的数,把这个数减去1,然后对于这n个数,除以他们的最大公约数.当一个人无法操作时便输了。求先手是否必胜。题解定义状态1:有奇数个偶数,奇数至少一个定义状态2:有偶数个偶数,且奇数个数≥2定义状态3:有偶数个偶数,奇数一个所有数都为1,为必败态,属于状态2状态...原创 2018-09-25 21:36:19 · 361 阅读 · 0 评论 -
【洛谷P4719】动态DP(全局平衡二叉树)
题目大意给定一棵n个点的树,点带点权。有m次操作,每次操作给定x,y,表示修改点x的权值为y。你需要在每次操作之后求出这棵树的最大权独立集的权值大小。题解如果不带修改操作,正常的DP式:dp[u][1]dp[u][1]dp[u][1]表示当前结点保证选择,这个结点的子树独立集最大权值。dp[u][0]dp[u][0]dp[u][0]表示当前结点不选择,这个结点的子树独立集最大权值。...原创 2019-03-23 15:51:19 · 571 阅读 · 0 评论 -
【BZOJ5223】有理有据题(K-D树)
题目大意有n颗炸弹,第i颗炸弹的爆炸范围为[li,ri][l_i,r_i][li,ri].有m个房子,标号为i的房子为一条线段[ai,bi][a_i,b_i][ai,bi](只要房子线段与炸弹相交视为炸弹能摧毁房子)几种操作:A x y:增加一个房子[x,y][x,y][x,y],按顺序标号。C i:查询第i个炸弹能炸毁的连续标号的房子,最多连续多少个。Q:查询每个C 1~n...原创 2019-03-02 21:57:21 · 529 阅读 · 0 评论 -
【2019.1雅礼集训DAY2 T2】bracket(点分治+FFT)
题意给定一棵有 n 个节点的无根树,每个节点上是一个字符,要么是(,要么是)。定义 S(x, y) 为从 x 开始沿着最短路走到 y,将沿途经过的点上的字符依次连起来得到的字符串。合法括号序定义如下:1,()是合法的。2,若 A,合法,则(A)也合法。3,若 A,B 分别合法,则 AB 也合法。函数 f(x, y) 等于对 S(x, y) 进行划分,使得每一个部分都是合法括号序,能...原创 2019-01-10 11:54:07 · 730 阅读 · 0 评论 -
【BZOJ4543】Hotel加强版(长链剖分 + 启发式合并)
题意给一棵树,从中选三个点,使得三个点两两间距离相等,求方案数。题解对每一个结点,用num[u][d]num[u][d]num[u][d]表示子树中到当前结点u的距离为d的节点数,用way[u][d]way[u][d]way[u][d]表示已经有很多两个结点的配对,再添加一个到当前结点距离为d的结点即可构成一个方案的结点对数。枚举子节点v,先计算答案Ans+=way[u][d+1]×num...原创 2019-01-09 21:43:30 · 556 阅读 · 0 评论 -
【2019.1雅礼集训 DAY1 T2】permutation(可持久化线段树)
题意给出nnn个数AiA_iAi定义排列一个 1~n 的排列 P 的价值为:∑i=1nAi×Pi\sum_{i=1}^n A_i\times P_ii=1∑nAi×Pi求出排列价值前kkk小的kkk个排列的价值。...原创 2019-01-09 20:54:39 · 568 阅读 · 0 评论 -
【CodeForces553E】Kyoya and Train(DP+FFT+CDQ分治)
题目大意给一个有向图,有一个人要从111走到nnn,第iii号边花费的钱为cic_ici,花费的时间为111~TTT中随机的值,每种时间的概率为pi,jp_{i,j}pi,j,如果这个人在TTT时刻之后走到nnn,就要交XXX的罚款,求这个人花钱的最小期望。题解令dp[u][t]dp[u][t]dp[u][t]表示当前走到了u号结点,已经花费的时间为t,走到终点的最小期望代价。dp[u...原创 2018-12-25 20:27:55 · 836 阅读 · 0 评论 -
【CodeForces793E】Oleg and chess(扫描线+线段树+网络流)
题目大意给一个n×n (n≤10000)n\times n\ (n\leq 10000)n×n (n≤10000)的棋盘,有q (q≤10000)q\ (q\leq 10000)q (q≤10000)个不相交的矩形区域不能放棋子,在剩余的格子里最多能放多少个车,使得他们无法互相攻击。题解十分综合的题目如果nnn很小,对每一个横坐标和纵坐标建立一个结点...原创 2018-12-25 20:00:35 · 399 阅读 · 0 评论 -
【CodeForces908H】New Year and Boolean Bridges (FWT)
题目大意对一个有向图(1≤n≤47)(1\leq n\leq47)(1≤n≤47),定义f(u,v)f(u,v)f(u,v)的值为true,当且仅当存在一条路径使得uuu能走到vvv给一个“邻接矩阵”A[i][j]A[i][j]A[i][j]:如果A[i][j]=='A',则f(u,v) and f(v,u)为true如果A[i][j]=='X',则f(u,v) xor f(v,u)为tr...原创 2018-12-23 11:44:43 · 326 阅读 · 0 评论 -
【BZOJ2216】Lightning Conductor (决策单调性DP)
题目大意给一个序列aia_iai,对每一个i,求出最小的非负整数p,使得对任意j满足aj≤ai+p−∣i−j∣a_j\leq a_i+p-\sqrt {|i-j|}aj≤ai+p−∣i−j∣题解移项得p≥aj−ai+∣i−j∣p\geq a_j-a_i+\sqrt {|i-j|}p≥aj−ai+∣i−j∣绝对值可以去掉,正着算一遍,倒着算一遍,取最大值即可此时保证i>...原创 2018-12-27 19:53:52 · 253 阅读 · 0 评论 -
【BZOJ3864】Hero meet devil(dp)
题目大意对每一个i(1<=i<=n),求长度为m,与给定字符串S的最长公共子序列的长度为i的字符串有多少个?题解DP新套路刚开始想的时候,怎么定义状态都会造成重复等各种问题,于是搜题解。。。考虑求LCS时的dp:定义lcs[i][j]lcs[i][j]lcs[i][j]表示A串的前i位与B串的前j位的LCS长度lcs[i][j]=max{lcs[i−1][j−1]+1&nb...原创 2018-12-27 17:12:56 · 413 阅读 · 0 评论 -
【AtCoder1984】Wide Swap (拓扑排序转化)
题意给一个(1~n)排列A,你可以做任意次操作,选择两个位置i,j,且∣i−j∣≥K|i-j|\geq K∣i−j∣≥K且∣Ai−Aj∣=1|A_i-A_j|=1∣Ai−Aj∣=1,然后交换AiA_iAi,AjA_jAj。求以此操作得到的最小字典序排列。题解用pos[i]表示值i所在位置,题目操作在pos上即为:选择相邻两个数,且这两个数差大于等于K,交换这两个数。容易发现两个个性...原创 2018-09-22 22:04:24 · 452 阅读 · 0 评论 -
【AtCoder1983】BBQ Hard (组合数+巧妙模型转化)
半题解输入A[i],B[i],求∑i=1N∑j=i+1NCAi+Aj+Bi+BjAi+Bi\sum_{i=1}^N\sum_{j=i+1}^N C_{A_i+A_j+B_i+B_j}^{A_i+B_i}i=1∑Nj=i+1∑NCAi+Aj+Bi+BjAi+Bi题解CAi+Aj+Bi+BjAi+BiC_{A_i+A_j+B_i+B_j}^{A_i+B_i}CAi+Aj+B...原创 2018-09-22 21:26:51 · 347 阅读 · 0 评论 -
【AtCoder1981】Shorten Diameter(图论思维)
题意给一棵树,要求删去最少的点,使得树联通且直径小于等于K(N<=2000)题解简单的问题也容易想复杂。对于K为偶数,枚举一个点,将距离此点>K/2的全部删掉即可满足条件,取删点数最小值。对于K为奇数,枚举一条边,树被此边分为两棵,将其深度>(K-1)/2的全部删掉,取删点数最小值。考试时想复杂了:把直径求出,然后试图从直径两头删点,包含大量特殊情况。。。死路一条...原创 2018-09-22 21:16:13 · 448 阅读 · 0 评论 -
【AtCoder2387】+/- Rectangle
题意构造一个H×WH \times WH×W的矩阵,满足一下条件所有元素为整数,且属于[−109,109][-10^9,10^9][−109,109]所有元素和为正数对每个h×wh \times wh×w的子矩阵,它的元素和为负数题解根据样例,最朴素的想法即为,给满足x mod h=0x\ mod\ h=0x mod h=0且y m...原创 2018-10-02 20:58:49 · 536 阅读 · 0 评论 -
【AtCoder2307】Tree Game(博弈)
题意有一棵树,每个结点上有A[i]个石子,A开始把一个棋子放在任意一个结点上,然后由A开始,A,B轮流操作将当前棋子的结点石子数减1将棋子移动到相邻的结点上不能操作者输求A开始把棋子放在哪儿保证能赢。题解性质:棋子不会往比自己石子多的地方走(如果这样走,对方可以再走回来,自己就少了一颗棋子,对方又比自己多,打消耗战打不赢的。。。)然后就可以直接模拟计算NP状态枚举一个点作为起点,...原创 2018-09-25 22:01:24 · 333 阅读 · 0 评论 -
【AtCoder2306】Rearranging(拓扑)
题意黑板上有n个数,A首先按照自己的意愿将n个数重新排列(可以是原来的顺序),然后让B进行如下操作:选择一对相邻且互质的数,交换它们的位置.(这个操作B可以进行无数次.)A想要这个序列的字典序尽可能小,而B想要这个序列的字典序尽可能大。两人都采取最优策略的情况下,最后形成的序列是什么样子的.题解发现不互质的数,只要在一开始A放好后,顺序就固定下来,无法改变。为了使得字典序最小,我们对...原创 2018-09-25 21:55:37 · 352 阅读 · 0 评论 -
【CodeForces500E】New Year Domino (线段树+并查集+栈)
题目大意有一排多米诺骨牌,按x坐标顺序从左到右输入,每个骨牌有他的位置p,高度l,可以花费1代价使骨牌高度+1,有q个询问,询问一个区间l,r,从l开始推倒,使[l,r]区间全部倒下的最小代价。 题解考虑将询问排序,离线处理。 因为左边的骨牌有可能会推倒它右边的连续一段区间的骨牌,我们处理询问时应按询问左端点从右往左处理。 设当前左端点已经处理到第lll个骨牌。 用adda...原创 2018-03-02 19:42:22 · 422 阅读 · 0 评论 -
【hihoCoder1511】树的方差
题意对于一棵 n (1≤n≤1000000) 个点的带标号无根树,设 d[i] 为点 i 的度数。 定义一棵树的方差为数组 d[1..n] 的方差: 令p=d¯p=\overline d,(d的平均值)(V为方差) V=(d1−p)2+(d2−p)2+...+(dn−p)2nV=\frac {{(d_1-p)}^2+{(d_2-p)}^2+...+{(d_n-p)}^2} n 给定 n原创 2018-01-20 10:44:25 · 484 阅读 · 1 评论 -
【HDU1527】取石子游戏(威佐夫博弈)
题目:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 威佐夫博弈: 威佐夫博弈代码:#include#include原创 2017-02-10 19:36:06 · 413 阅读 · 0 评论 -
【codejam2008_Round1C_B】Ugly Numbers (DP)
题目大意:输入一个长度最长为40位的数,再中间插入一些’+’或’-‘,使整个式子结果可以被2或3或5或7整除,有多少种方法达到目标。题解:考虑处理2,3,5,7的余数, 可以处理2×3×5×7=2102×3×5×7=210的余数。 dp[i][j]表示前i位除以210余j的方案数。 dp[i][j]=∑k=1idp[k−1][(j−num(k,i)+210)mod210]+dp[k−1][(j+原创 2017-07-10 15:35:13 · 351 阅读 · 0 评论