自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZigZagK的博客

Never give up fighting!

  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 【背包+容斥】BZOJ1042(HAOI2008)[硬币购物]题解

题目概述有 4​4​ 种硬币。面值分别为 c1​c_1​ , c2​c_2​ , c3​c_3​ , c4​c_4​ 。某人去商店买东西,去了 tot​tot​ 次。每次带 di​d_i​ 枚 ci​c_i​ 硬币,买 si​s_i​ 的价值的东西。请问每次有多少种付款方法。解题报告直接背包会TLE,但由于只有 44 种硬币,所以……所以好难啊!根据容斥,答案为:价值恰好为 ss 但硬币数不受限制的

2017-10-31 10:05:46 265

原创 【估计】BZOJ1011(HNOI2008)[遥远的行星]题解

题目概述直线上 nn 颗行星, X=iX=i 处有行星 ii ,行星 jj 受到行星 ii 的作用力,当且仅当 i≤A×ji\le A\times j 。此时 jj 受到作用力的大小为 Fi→j=Mi∗Mjj−iF_{i\to j}={M_i*M_j\over j-i} 其中 AA 为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力,只要结果的相对误差不超过5%即可.

2017-10-30 15:09:16 2012 1

原创 【wqs二分+最小生成树】BZOJ2654[tree]题解

题目概述给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有 KK 条白色边的生成树。解题报告可怕的题目……首先我们可以先求出一棵最小生成树,但是不一定满足 KK 条白色边。这怎么办呢?容易想到提高(降低)白色边的优先级,从而多选(少选)白色边。于是我们可以将白色边的边权全加上 midmid (这样白色边之间的优先级保持不变),然后重新求最小生成树,如果满足要求说明 midmid 可

2017-10-30 14:24:53 583

原创 【Prufer编码+组合】BZOJ1005(HNOI2008)[明明的烦恼]题解

题目概述有 nn 个点,每个点的度数为 did_i (若 di=−1d_i=-1 则度数没有限制),求满足条件的树的个数。解题报告根本不会做好吗!首先介绍一下Prufer编码:树 →\to Prufer编码 找到编号最小的度为 11 的节点,删除该点及连接该点的边,将与该点相邻的点加入数列。重复删除/加入,直到剩下两个节点,最后的数列就是Prufer编码(长度为 n−2n-2 )。Prufe

2017-10-29 18:48:06 303 1

原创 【分数规划-最大比例环】POJ3621[Sightseeing Cows]题解

题目概述给出 nn 个点, mm 条单向边。每个点有点权 wiw_i ,每条边有边权 tit_i 。求点权比边权最大的环。解题报告在POJ做分数题简直就是作死,可以WA到飞起来,还是分数规划裸题(搞事啊,为什裸题我现在才做过啊),二分枚举答案 midmid ,然后用新边权 wx−mid×t(x,y)w_x-mid\times t(x,y) 建边。只要存在一个环的边权和大于等于 00 ,就说明验证成功

2017-10-29 12:57:45 702

原创 【DP】51Nod1354[选数字]题解

题目概述给出 nn 个数和 KK ,选出 nn 个数中若干个数使得乘积恰好为 KK ,求方案数。解题报告我太菜了,都是JZdalao教我题目的……刚开始我想拆分素因子然后背包……发现直接爆炸。实际上我们预处理出 K​K​ 的因子,然后定义 f[i][j]​f[i][j]​ 表示前 i​i​ 个数组成 K​K​ 的第 j​j​ 个因子的方案数(将因子由小到大排序)就可以了。至于确定因子标号,我用了二分

2017-10-28 21:19:15 258

原创 【分数规划-最小比例生成树】POJ2728[Desert King]题解

题目概述给出 nn 个点 (x,y,z)(x,y,z) ,两个点 i,ji,j 之间的距离为 (xi−xj)2+(yi−yj)2−−−−−−−−−−−−−−−−−√\sqrt{(x_i-x_j)^2+(y_i-y_j)^2} ,代价为 |zi−zj||z_i-z_j| ,求代价与距离比例最小的生成树。解题报告也是分数规划的经典题目(搞事啊,为什么经典题目我现在才知道啊),首先二分枚举答案 midmi

2017-10-28 20:52:55 314

原创 【分数规划】POJ2976[Dropping tests]题解

题目概述给出 nn 个物品,有 a,ba,b 两个权值,现在要选 kk 个物品,使得 ∑ki=1ai∑ki=1bi\sum_{i=1}^{k}a_i\over \sum_{i=1}^{k}b_i 最大。解题报告分数规划裸题,二分一个答案 midmid ,然后需要验证 ∑ki=1ai∑ki=1bi≥mid{\sum_{i=1}^{k}a_i\over \sum_{i=1}^{k}b_i}\ge mid

2017-10-28 18:25:35 301

原创 【思维】AtCoder Grand Contest(013)C[Ants on a Circle]题解

题目概述有 nn 只蚂蚁在长度为 LL 的环上的不同位置(位置按编号递增),蚂蚁相撞会立刻转向,求最后每只蚂蚁的位置。解题报告栽了不知道多少次的题目……首先老套路,蚂蚁相撞看作穿过,最后相对位置不变。但是环是什么鬼?想一下发现其实就是让我们确定某一只蚂蚁,从而确定所有的蚂蚁。方便起见,我们用第一只蚂蚁来分析。刚开始,第一只蚂蚁位置最靠前,如果没有任何一只蚂蚁走过了临界点 00 ,则第一只蚂蚁将一直最

2017-10-28 16:26:20 352

原创 【折半搜索】BZOJ2679(Usaco2012 Open)[Balanced Cow Subsets]题解

题目概述给出 nn 个数( n≤20n\le 20 ),现在从中选出若干个数(不可不选),若这若干个数能分成两个加和相等的集合,则是一种合法方案。求合法方案数。解题报告如果直接枚举,状态有 3203^{20} ,显然是不行的。但如果已知一些数的状态,再枚举其他数的状态,是可以快速统计的。所以考虑折半搜索。但由于是选出若干个数,问这些数是否有合法方案,所以需要记录每种方案的状态,否则会算重复。我秉承不

2017-10-27 19:37:05 435

原创 【最小割Dinic】BZOJ1163(Baltic2008)[Mafia]题解

题目概述有 nn 个车站, mm 条双向边,封闭 ii 车站的代价为 cic_i ,现在可以封闭若干个车站,求使得 ss 无法到 tt 的最小代价。解题报告裸的最小割问题……先拆点,然后刷最大流就行了……示例程序#include<cstdio>#include<cstring>#include<algorithm>#define fr first#define sc second#defi

2017-10-27 15:23:21 234

原创 【Lucas定理+高维前缀和】2017.10.26杂题[虚妄之诺]题解

题目概述写到一半电脑重启了,不想写了。解题报告神题……我自己根本想不出来。首先观察一个深度为 depdep 节点(以 dep=4dep=4 为例),发现贡献是这样的:x=0:1 1 1 1 1x=1:1 2 3 4 5x=2:1 3 6 10 15x=3:1 4 10 20 35x=4:1 5 15 35 70x=5:................WTF?杨辉三

2017-10-26 08:16:40 387

原创 【高维前缀和】SPOJ(TLE)[Time Limit Exceeded]题解

题目概述题目名称要不要这么奇葩而且和题面没有半毛钱关系啊,我上交题目都以为自己TLE了。给出 nn 个数 cic_i ,现在需要构造 aia_i 使得:ai mod ci>0a_i\ mod\ c_i>0 。ai and ai+1=0a_i\ and\ a_{i+1}=0 。解题报告先不考虑 cic_i ,那么我们很容易想到DP: f[i][j]f[i][j] 表示前 ii 个数第 ii 个是

2017-10-25 18:50:26 606 2

原创 【剩余类+贪心+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 310

原创 【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 328

原创 【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 406

原创 【高维前缀和+容斥】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 301

原创 【Lucas定理】BZOJ4403[序列统计]题解

题目概述给定三个正整数 N,L,RN,L,R ,统计长度在 11 到 NN 之间,元素大小都在 LL 到 RR 之间的单调不降序列的数量。输出答案对 106+310^6+3 取模的结果。解题报告先考虑长度为 nn 方案数。假设现在选好了 nn 个数,那么序列是确定的(相同不算),所以直接插板法就可以了,令 m=R−L+1m=R-L+1 ,则方案数就是 (m+n−1m−1)m+n-1\choose m

2017-10-24 16:30:30 344

原创 【Lucas定理】洛谷1869[愚蠢的组合数]题解

题目概述求 (xy​)x\choose y​ 的奇偶性。解题报告实际上就是求 (xy) mod 2{x\choose y}\ mod\ 2 ,但是 xx 和 yy 太大了。所以要用到Lucas定理: (xy)=(x mod py mod p)×⎛⎝⌊xp⌋⌊yp⌋⎞⎠{x\choose y}={x\ mod\ p\choose y\ mod\ p}\times {\lfloor{x\over p

2017-10-24 15:50:38 466

原创 【DFS】NOIP2014Day1T2[联合权值]题解

解题报告我刚开始竟然天真的只想到了 xx 和 fa(fa(x))fa(fa(x)) 的情况……全国联赛要狗带了……好像有个很棒的公式可以使用: 2ab=(a+b)2−a2−b22(ab+ac+bc)=(a+b+c)2−a2−b2−c22(ab+ac+ad+bc+bd+cd)=(a+b+c+d)2−a2−b2−c2−d2⋯2ab=(a+b)^2-a^2-b^2\\2(ab+ac+bc)=(a+b

2017-10-23 20:05:52 298

原创 【DP】NOIP2015Day2T2[子串]题解

解题报告直接DP, f[i][j][k][0/1]f[i][j][k][0/1] 表示 AA 串前 ii 位匹配 BB 串 jj 位,拿出了 kk 个子串, ii 位没选/选了的方案数。好像有三维做法,但是我不会……示例程序#include<cstdio>#include<cstring>using namespace std;const int maxn=1000,maxm=200,MOD=

2017-10-23 19:06:06 267

原创 【剩余类+树状数组】2017.10.23杂题(liu_runda NOIP 联考 DAY1)[飞]题解

题目概述呵呵,写到一半重启了,没心情写题目概述。liu_runda NOIP 联考 DAY1 T3。解题报告先转化一下……如果某个点被 nn 条线段覆盖,则贡献为 n(n−1)2\frac{n(n-1)}{2} ,这个式子也可以理解为这 nn 条线段两两组合的方案数。所以鬼畜值(滑稽)之和其实就是能相交线段的个数。显然只有 {xi>xj|i<j}\{x_i>x_j|i<j\} 的线段才会产生贡献,这

2017-10-23 16:10:56 423

原创 【树的个数+容斥】2017.10.23杂题(liu_runda NOIP 联考 DAY1)[任]题解

题目概述呵呵,题目概述写到一半电脑重启了,没心情写了。liu_rundaNOIP 联考 DAY1 T2。解题报告没有多条简单路径就是树喽……那么这道题就是让你求一个子矩阵中树的个数。然后有个很显然的结论:森林中树的个数 == 节点数 −- 边数。于是容斥就行了。示例程序#include<cstdio>using namespace std;const int maxn=2000,maxm=200

2017-10-23 13:30:18 497

原创 【Tarjan】NOIP2015D1T2[信息传递]题解

解题报告这……为什么我不在那年考NOIP……这道题显然是求最小且不为 11 的最小环……示例程序#include<cstdio>#include<algorithm>using namespace std;const int maxn=200000;int n,E,lnk[maxn+5],nxt[maxn+5],son[maxn+5],ans;int ti,dfn[maxn+5],low[m

2017-10-22 20:00:42 385

原创 【AC自动机+DP】BZOJ1030(JSOI2007)[文本生成器]题解

题目概述如果一篇文章中至少包含给出 nn 个单词中的一个单词,那么我们说这篇文章是可读的。求长度为 mm 字符集只有 [A,Z][A,Z] 的文本中可读文本的数量。解题报告AC自动机+DP套路题……由于直接求可读文本比较困难,正难则反,我们求不可读文本的数目 ansans ,那么 26m−ans26^m-ans 就是答案。先将 nn 个模板串建成AC自动机,然后 f[i][j]f[i][j] 表示文

2017-10-22 18:56:54 324

原创 【LCA】2017.10.22杂题[宝藏探寻]题解

题目概述给出一棵 nn 个点的树,每个点有点权 aia_i ,一个连通块的价值为 (∑ai)2(\sum a_i)^2 。现在给出 mm 个询问,每个询问 (x,y)(x,y) 求删除 x→yx\to y 路径上的点以及相邻的边后的价值(询问相互独立)。解题报告naive想法:一步一步跳到LCA,同时统计。优化:用ST算法倍增来跳,快速统计。统计的时候记录一下子树和(包括根节点)以及子树平方和(不包

2017-10-22 15:30:36 342

原创 【KMP-fail树】51Nod1277[字符串中的最大值]题解

题目概述给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。解题报告KMP的 failfail 树是 failfail 指针构造起来的一棵树(同理AC自动机也有 failfail 树)。那么会发现一些性质:节点 xx 代表的前缀的出现次数 == 子树 xx 的节点个数。考虑KMP的定义,很容易证明。示例程序#include<cstdio>#include<cstring>#inc

2017-10-21 10:24:01 331

原创 【状压DP+矩阵乘法】51Nod1311[转换机]题解

题目概述给你两个等长的字符串S与T,且S与T都只包含有”a”, “b”, “c”这三个字符。 你需要花一些钱来实现一些操作,让字符串S能最终变成字符串T,操作只有以下三种:1)将字符串S中的一个‘a’字符变成‘b’,并消耗cost0的花费;2)将字符串S中的一个‘b’字符变成‘c’,并消耗cost1的花费;3)将字符串S中的一个‘c’字符变成‘a’,并消耗cost2的花费;你一共有金钱Money,问

2017-10-21 07:57:54 276

原创 【贪心+ST算法+单调栈】51Nod1288[汽油补给]题解

题目概述有 n+1n+1 个城市, 00 是起点 nn 是终点,开车从 0→1→2⋯→n0\to 1\to 2\cdots\to n ,车每走 11 个单位距离消耗 11 个单位的汽油,油箱的容量是 TT 。给出每个城市到下一个城市的距离 DD ,以及当地的油价 PP ,求走完整个旅途最少的花费。如果无法从起点到达终点输出 −1-1 。解题报告以前做过的贪心题……贪心想法不难,主要是要考虑完整。从

2017-10-20 16:30:32 554

原创 【Hash+拓扑】2017.10.20杂题[Rhyme]题解

题目概述给出 nn 个模板串,现在要求一个最长的串,使得该串中所有长度为 KK 的子串都是一个模板的子串。如果可以无限长输出 INFINF 。解题报告其实不难吧……但是太弱了就没想出来。对于每个模板,相邻两个长度为 K−1K-1 (不是 KK ,因为两个 K−1K-1 子串组合成 KK )的子串建边,然后刷拓扑,如果有环就是 INFINF ,否则是最长链 +K−1+K-1 。示例程序自然溢出+map

2017-10-20 14:46:24 458

原创 【贪心+堆】AtCoder Grand Contest(018)C[Coins]题解

题目概述有 X+Y+ZX+Y+Z 个人,每个人有 AiA_i 个金币, BiB_i 个银币, CiC_i 个铜币。现在选 XX 个人提供金币, YY 个人提供银币, ZZ 个人提供铜币。求最多提供多少币(金银铜)。解题报告挺好的题目,可以完美地干翻像我这样的蒟蒻。我们先考虑只有金币和银币的最优策略:按照 Bi−AiB_i-A_i 从小到大排序,然后前 XX 个取 AA ,后 YY 个取 BB 。如果

2017-10-19 16:43:22 389

原创 【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 377

原创 【状压DP】NOIP2016Day2T3[愤怒的小鸟]题解

解题报告好像是比较简单的状压DP,我有一个数组没有清 00 ,如果是全国联赛就炸了……定义 f[s]f[s] 表示状态为 ss 的最优解,那么每次枚举 ii 和 jj ,用一条抛物线穿过去,并计算出新状态 tt ,用 f[s]+1f[s]+1 修正 f[t]f[t] 。每次都枚举太慢,我们可以直接预处理 g[i][j]g[i][j] 表示穿过 ii 和 jj 打掉的猪的集合,最后再注意一下只打一头猪

2017-10-18 20:22:18 534

原创 【队列】NOIP2016Day2T2[蚯蚓]题解

解题报告哇直接用堆……然后发现 m=7×106m=7\times 10^6 ,用堆只有 8080 分。首先每次增长只是相对的,所以我们可以使被选出的蚯蚓减少长度而不是让其他蚯蚓增加长度。然后我们观察一下每次切蚯蚓,会发现被切的的蚯蚓比原来的蚯蚓短(且不变长),也就是说每次选出的蚯蚓长度是递减的。这就很棒啊,有单调性的话用三个队列就可以了。示例程序#include<cstdio>#include<a

2017-10-18 16:50:06 312

原创 SG函数

SG函数模型一张有向图和若干个棋子,两个选手轮流操作,每次可以将任意一个棋子沿着有向边移动(不可以不移动),无法移动者输,问先手是否必胜。解决定义 mex{s} 表示 s 集合中没有出现的最小的非负整数,比如 mex{0,1,2}=3,mex ϕ=0 。然后定义每个节点的SG函数为 SG(x)=mex{SG(y)|(x,y)∈E} 也就是后继节点中没有出现的最小的非负整数。这么定义显然有几个结论:

2017-10-18 14:45:21 314

原创 【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 311

原创 【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 284

原创 【差分+阶梯Nim游戏】BZOJ1115(POI2009)[石子游戏Kam]题解

题目概述有 nn 堆石子数递增的石子,每次可以选一堆取走一些(不可以不取),但是要保证石子数依然递增,无法操作者输。问先手是否必胜。解题报告博弈论好难啊……虽然写起来好似神仙……刚开始以为是普通 NimNim 游戏,但是一看到限制我就惊呆了……首先我们差分,令 s[i]=a[i]−a[i−1]s[i]=a[i]-a[i-1] ,那么取走 ii 堆石子 xx 个的时候 s[i]−=x,s[i+1]+=

2017-10-17 19:46:41 336

原创 【贪心】51Nod1615[跳跃的杰克]题解

题目概述你刚开始在 00 ,第 ii 步可以向左或向右跳 ii ,求最少跳几步刚好跳到 xx 。解题报告刚开始的想法是先跳到最接近 xx ,然后一步一步迂回跳(一下往左一下往右)到 xx 。这显然是错的……我们看 88 :1+2+3+4=101+2+3+4=10−1+2+3+4=8-1+2+3+4=8所以我们可以通过改变前面某一步的方向使得跳过头的方案跳回 xx 。假设跳过头到了 XX ,那么只有当

2017-10-17 17:48:46 963

原创 【Nim游戏】hihoCoder#1172[博弈游戏·Nim游戏·二]题解

题目概述有 nn 个硬币,每次可以先把一个正面朝上的硬币 ii 改成反面,然后还可以决定是否把 [1,i−1][1,i-1] 的某个硬币翻面,无法操作时失败。问先手是否必胜。解题报告感觉思考博弈论题目好似智障,开始打代码时好似神仙。有一个关键结论:若某个 NimNim 游戏局面中出现石子数一样的两个石子堆,则去掉这两个石子堆后新局面与原局面等价。证明非常简单:假设 ai=aja_i=a_j ,则 a

2017-10-17 15:02:20 292

2012年noi冬令营陈立杰讲稿

丽洁姐的后缀自动机讲解!

2017-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除