Codeforces题解
文章平均质量分 56
ZigZagK
一个蒟蒻。
展开
-
【DP+组合数学】Codeforces559C[Gerald and Giant Chess]题解
题目概述nn 行 mm 列的过河卒问题,但有 kk 个障碍物(不能经过),求方案数。解题报告哇,最近考到这道题,考试时完全不会做啊,考完后发现很水啊Orz。 朴素的障碍物过河卒问题直接刷递推,效率是 O(n×m)O(n\times m) ,扛不住。而 kk 比较小,显然要在障碍物上搞事情。 先将障碍物排序,定义 f[i]f[i] 表示前 ii 个障碍物只过第 ii 个障碍物的方案数。我们认为 (原创 2017-07-30 15:37:42 · 369 阅读 · 0 评论 -
【two-pointer】Codeforces762C[Two strings]题解
题目概述给出两个串 A,BA,B ,现在需要删除 BB 中的一个子串使删除后的 BB 是 AA 的子序列。求删除最少的方案。解题报告枚举 pre,sufpre,suf 表示删除 [pre+1,suf−1][pre+1,suf-1] ,记录 MIN(pre)MIN(pre) 表示使 BB 前 prepre 个是 AA 前 MINMIN 个的子序列的最小 MINMIN ,同理记录最大的 MAX(suf)原创 2017-10-25 10:50:56 · 464 阅读 · 0 评论 -
【DP】Codeforces762D[Maximum path]题解
题目概述给出 3×n3\times n 的带权网格,从 (0,1)(0,1) 开始走,一个格子只能走到相邻(上下左右)格子且不能被重复走,求到 (2,n)(2,n) 的最大权值。解题报告我们会发现如果回头走了两个格子,一定可以被回头走了一个格子(或不回头)的方案替换掉。所以我们只需要考虑回头走了一个格子。考虑DP,定义 f[0/1/2/3][j]f[0/1/2/3][j] 表示第 jj 列走完,目前原创 2017-10-25 11:36:19 · 343 阅读 · 0 评论 -
【剩余类+贪心+DP】Codeforces571B[Minimization]题解
题目概述给出 nn 个数和 KK ,现在需要将 nn 个数组成序列,求 ∑n−Ki=1|Ai−Ai+K|\sum_{i=1}^{n-K}|A_i-A_{i+K}| 的最小值。解题报告+K+K ……想到剩余类,这样的话 nn 个数就只有 KK 个剩余类。同时观察到这些剩余类的个数只有 ⌊n−1k⌋\lfloor{n-1\over k}\rfloor 和 ⌊n−1k⌋+1\lfloor{n-1\over原创 2017-10-25 15:05:45 · 329 阅读 · 0 评论 -
【反序表+树状数组】Codeforces Round #441(Div.2)D[Sorting the Coins]题解
题目概述刚开始有一个全是 11 的序列,现在给出 mm 操作,每个操作把一个位置改成 00 ,每次操作完成后求冒泡(从大到小)次数。解题报告这道题明显是个伪反序表(不是排列),但是可以沿用反序表的性质:冒泡的次数 =Bmax=B_{max} ( BB 是反序表)。由于只有 00 和 11 ,所以反序表的最大值位置 maxmax 我们是可以确定的,那就是最后一个 00 的位置。所以每次维护最后一个 0原创 2017-10-17 14:30:14 · 261 阅读 · 0 评论 -
【高维前缀和】Codeforces165E[Compatible Numbers]题解
题目概述给出序列 {an}\{a_n\} ,对于每个 ii ,输出任意一个满足 ai and aj=0a_i\ and\ a_j=0 的 aja_j 。解题报告这种东西马上想到高维前缀和求超集……不过只需要求任意解,所以更简单了……网上好像有用状压DP做的……我不清楚……(高维前缀和算状压吧QAQ?)示例程序#include<cstdio>#include<cctype>#include<cst原创 2017-11-06 15:05:42 · 395 阅读 · 0 评论 -
【dsu on tree】Codeforces600E[Lomsat gelral]题解
题目概述给出一棵 nn 个节点的树,每个节点有一个颜色。如果 cc 是一个节点子树中出现次数最多的颜色,则称该节点被 cc 占领(一个节点可以被许多颜色占领)。求每个节点的 ∑c\sum c 。解题报告烂大街的dsu on tree(树上启发式合并)经典题。先树剖,对于 xx 我们递归求出轻儿子的答案(不记录信息),然后再求出重儿子的答案(记录信息)。之后暴力统计所有子树节点的信息(重儿子为根的子树原创 2017-12-18 20:43:04 · 374 阅读 · 0 评论 -
【dsu on tree】Codeforces741D[Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths]题解
题目概述给出一棵 nn 个节点的树,边权是小写字母( aa 到 vv ),若一条链上的小写字母可以打乱排列成回文则称该链满足条件。求每个节点子树中最长的满足条件的链。解题报告询问子树不修改果断上dsu on tree。能打乱排列成回文说明至多只有一个字母出现了奇数次,因为字母只有 2222 个,所以位运算异或就可以快速判断。至于求答案……因为dsu on tree是大暴力,所以瞎搞就行了……示例程序原创 2017-12-19 20:16:41 · 460 阅读 · 0 评论 -
【高维前缀和+容斥】Codeforces449D[Jzzhu and Numbers]题解
题目概述有 nn 个数 aia_i ,求选出若干个数(不可不选) andand 起来为 00 的方案数。解题报告把每个数在二进制下的 0101 序列看作集合,那么题目转化为选出一些集合交集为空的方案数。然后……完全不会做啊……然后考虑容斥,令 f(i)f(i) 表示包含集合 ii 的数的个数, S(i)S(i) 表示集合 ii 的元素个数,考虑容斥,那么答案就是 ∑220−1i原创 2017-10-24 21:12:47 · 318 阅读 · 0 评论 -
【组合】Codeforces40E[Number Table]题解
题目概述有 n×mn\times m 的 1,−11,-1 矩阵,现在 k(0≤k<max{n,m})k(0\le k<max\{n,m\}) 个位置已经确定,求每行每列乘积均为 −1-1 的方案数。解题报告好题!注意到 0≤k<max{n,m}0\le k<max\{n,m\} ,所以至少有一行或一列是没有任何一个元素确定过了的。令 n>mn>m ,我们可以先把其他 n−1n-1 行确定下来(组合原创 2017-11-09 11:24:16 · 329 阅读 · 0 评论 -
【容斥原理】Codeforces547C[Mike and Foam]题解
题目概述给出一个序列 {An}\{A_n\} 和 mm 个操作,每个操作是一个整数 xx :如果 AxA_x 没有加入到容器中,则加入;如果 AxA_x 已经在容器中,则移除。求每次操作后容器中 gcd(Ai,Aj)=1(i<j)gcd(A_i,A_j)=1(i<j) 的个数。解题报告好像是不难的容斥题,但是我从来没有用过容斥原理QAQ,这里简单说明一下:有 nn 个集合,第 ii 个集合是 SiS原创 2017-08-22 21:14:24 · 757 阅读 · 0 评论 -
【线段树+Hash】Codeforces452F[Permutation]题解
题目概述一个序列 {an}\{a_n\} 是反等差数列当且仅当:是 nn 的排列。不存在一个长度 >2>2 的子序列使得该子序列是等差数列。给出一个序列,判断该序列是不是反等差数列。解题报告记录 pos(a)pos(a) 表示 aa 在序列中的位置,对于任意 ii ,只要存在任意 kk 使得 pos(ai−k)<i<pos(ai+k)pos(a_i-k)<i<pos(a_i+k) ,就说明该序原创 2017-10-05 17:01:43 · 799 阅读 · 0 评论 -
【二分+状压DP】Codeforces743E[Vladik and cards]题解
题目概述给出一个序列 {An}\{A_n\} ,其中 Ai∈Z,Ai∈[1,8]A_i\in Z,A_i\in[1,8] ,求一个最大子序列,这个子序列满足:|numi−numj|≤1|num_i-num_j|\le 1 ,其中 numinum_i 表示 i∈Z,i∈[1,8]i\in Z,i\in[1,8] 的出现次数。相同的数连在一起,不能出现断开的情况。如 1,2,11,2,1 是不合法的原创 2017-09-24 15:07:05 · 451 阅读 · 0 评论 -
【数学分析】Codeforces Round #426(Div.2)C[The Meaningless Game]题解
题目概述有一个游戏,过程如下: 1.有两个数 a,ba,b ,刚开始 a=b=1a=b=1 。 2.随便取一个正整数 kk ,使 (1)a=a×k,b=b×k2a=a\times k,b=b\times k^2 或 (2)a=a×k2,b=b×ka=a\times k^2,b=b\times k 。 问最后 a,ba,b 是否能够变成给出的 A,BA,B 。解题报告其实我们只需要考虑 kk 是原创 2017-07-31 16:23:10 · 345 阅读 · 0 评论 -
【二分+贪心】Codeforces830A[Office Keys]题解
题目概述有 nn 个人,位置在 aia_i , mm 把钥匙,位置在 bib_i 以及一扇门,位置在 pp ,一个人出门需要先拿钥匙再出门,时间为 |ai−bj|+|bj−p||a_i-b_j|+|b_j-p| 。同一时刻可以有任意个人出门,但是钥匙只能一个人使用,求最少时间。解题报告要求最大值最小,所以用二分枚举答案 midmid 。然后问题是怎么判断是否可行,由于是直线距离,根据贪心,我们将 a原创 2017-09-28 14:45:04 · 357 阅读 · 0 评论 -
【DP+树状数组 or 贪心】Codeforces527D[Clique Problem]题解
题目概述给出平面上 nn 个点 xix_i ,每个点有个权值 wi(wi>0)w_i(w_i>0) ,当 |xi−xj|≥wi+wj|x_i-x_j|\ge w_i+w_j 时 i→ji\to j 有条边。求最大团(最大完全子图)。解题报告先将点按照位置排序,然后会发现若 k<j<ik<j<i 且 kk 能到 jj , jj 能到 ii ,则 kk 一定能到 ii 。证明很简单:xj−xk≥wk+w原创 2017-10-18 10:53:04 · 308 阅读 · 0 评论 -
【数学分析+除法分块】Codeforces830C[Bamboo Partition]题解
题目概述有 nn 个竹子,每个竹子刚开始高度为 00 ,每过一天会长高 11 ,现在每过 dd 天来检查一次,如果 ii 竹子的高度 ≥ai\ge a_i 则将该竹子高度砍为 aia_i 且该竹子不再生长,求砍掉高度不超过 kk 时 dd 最大为多少。解题报告除法分块性质: ⌊ni⌋\lfloor \frac{n}{i}\rfloor 排序去重之后是 O(n√)O(\sqrt{n}) 的。简单说明:原创 2017-10-01 12:25:30 · 751 阅读 · 0 评论 -
【DFS】Codeforces717E[Paint it really, really dark gray]题解
题目概述有一棵 nn 个节点的树,每个节点有黑色和粉色,刚开始你在 11 ,每次经过一个节点(刚开始不算)后就会改变该节点的颜色,求一种方案使得所有节点都变成黑色。解题报告感觉上好像是什么很神奇的题目,但实际上就是思考一下方法然后直接DFS就行了……对于一个节点 x(x≠1)x(x\not =1) ,递归处理所有子树,把所有子树都变成黑色,然后我们要想办法不改变子树状态而改变 xx 的颜色(如果 x原创 2017-10-19 14:20:24 · 392 阅读 · 0 评论 -
【Nim游戏+DP+矩阵乘法】Codeforces717D[Dexterina’s Lab]题解
题目概述有 nn 个石子堆( n≤109n\le 10^9 ),每个石子堆石子数(最多 100100 )为 ii 的概率为 pip_i 。问进行 NimNim 游戏的必胜概率。解题报告之前不知道 NimNim 游戏,知道了之后发现……这不是SB题目吗……定义 f[i][j]f[i][j] 表示前 ii 堆石子异或和为 jj 的概率,最后的答案就是 1−f[n][0]1-f[n][0] 。nn 太大了原创 2017-10-18 14:25:26 · 353 阅读 · 0 评论 -
【贪心+堆】Codeforces725D[Contest Balloons]题解
题目概述有 nn 个队伍,第 ii 个队伍有 tit_i 个气球,重量为 wiw_i ,其中第 11 个队伍是你所在的队伍。你可以给别的队伍任意数量的气球(不超过你的气球数),如果一个队伍的气球数 >> 重量,这个队伍就会飞起来(滑稽)并失去比赛资格。求你的队伍能达到的最小名次是多少(按气球数排名)。解题报告这是一道挺简单的贪心题。我们肯定要选气球数多于我们的队伍弄飞,且在这些队伍中选需要气球数少的原创 2017-08-10 20:40:53 · 383 阅读 · 0 评论 -
【C数学题D贪心】Codeforces Round #461(Div.2)
Acopy一个源文件会新产生一个源文件和一个副本,copy一个副本会新产生两个副本,现在有一个源文件,问能否copy出 xxx 个副本和 yyy 个源文件?瞎搞,注意一些特殊情况。#include<cstdio>using namespace std;int x,y;int main(){ freopen("A.in","r",stdin); ...原创 2018-02-08 03:42:32 · 283 阅读 · 1 评论