自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

世界

誰も いない 枯れた世界で 悪戲の 意味を知ったよ

  • 博客(41)
  • 收藏
  • 关注

原创 HDU 2065 "红色病毒"问题 指数生成函数

题目大意:求长度为nn的DNA单链,满足CC和TT出现偶数次,AA和GG任意,这样的DNA单链有多少种去学了下指数生成函数…… 设函数A(x)=∑+infi=0Aixii!A(x)=\sum_{i=0}^{+\inf}A_i\frac{x^i}{i!} 那么两种元素的组合就是A(x)∗B(x)A(x)*B(x) 理由很简单,我们发现 Aixii!∗Bjxjj!=Ai∗Bj∗(i+j)!i!∗

2015-05-29 09:49:11 1623

原创 codeforces #547D Mike and Fish 欧拉回路

题目大意:给定平面上的n个点,要求将每个点染成红色/蓝色,使得每行/每列的红色点数和蓝色点数之差≤1\leq 1将每一个横坐标/纵坐标看做一个点,每个点看做一条连接两个坐标的边 现在我们要将每条边染色使得每个点连接的所有边中两种颜色之差≤1\leq 1首先找到度数为奇数的点 这样的点一定有偶数个 将度数为奇数的点两两配对连边,这样所有点的度数就都是偶数了 然后对于每个连通块,任选一个初始度数为

2015-05-28 17:14:22 2603

原创 BZOJ 1982 Spoj 2021 Moving Pebbles 博弈论

题目大意:给定n堆石子,每次可以选择一堆石子,拿走任意个,然后将堆中剩余石子移动任意个到任意一些堆里,不能操作者为输,求是否先手必胜 必败状态为:nn为偶数,且将石子数相同的堆两两配对可以配成n2\frac n2对 例如: 66 1 1 4 4 5 5 1\ 1\ 4\ 4\ 5\ 5\ 这就是一个先手必败的初始状态 证明: 首先证明这个状态是必败的 由于堆可以两两配对,因此无论先

2015-05-28 15:05:30 1984

原创 BZOJ 3782 上学路线 动态规划+Lucas定理

题目大意:给定一张N∗MN*M的网格图,有TT个坏点,求左上角走到右下角的方案数对PP取模后的值首先把坏点和终点以xx坐标为第一键值,yy坐标为第二键值排序 令fif_i表示从原点不经过任何坏点走到第ii个点的个数,那么有DP方程: fi=Cxixi+yi−∑xj<=xi,yj<=yiC(xi−xj)(xi−xj)+(yi−yj)∗fjf_i=C_{x_i+y_i}^{x_i}-\sum_{x_

2015-05-28 13:51:14 2554

原创 BZOJ 2287 POJ Challenge 消失之物 分治+背包

题目大意:给定n个物品,每个物品有一个体积,对于所有的1≤i≤n,1≤j≤m1\leq i\leq n,1\leq j\leq m输出在不使用第ii个物品的情况下装满大小为jj的背包的方案数我这傻逼居然真的去写了分治背包…… 第i个物品存在的时间为[1,i−1][1,i-1]和[i+1,n][i+1,n]两个区间 然后分治…… 时间复杂度O(n2logn)O(n^2logn) 黄学长我仰慕您

2015-05-27 20:18:44 2074

原创 BZOJ 3456 城市规划 快速傅里叶变换

题目大意:求nn个点的无向简单连通图个数,n≤1.3∗105n\leq1.3*10^5 递推式:fi=2C2i−∑i−1j=1fj∗Cj−1i−1∗2C2i−jf_i=2^{C_i^2}-\sum_{j=1}^{i-1}f_j*C_{i-1}^{j-1}*2^{C_{i-j}^2} 推导戳这里 然后两侧同除(i−1)!(i-1)!得到: fi(i−1)!=2C2i(i−1)!−∑i−1j=1

2015-05-27 17:08:39 5665

原创 BZOJ 4073 Wf2014 Buffed Buffet 斜率优化

题目大意:给定dd种食物,食物分两个类型:离散食物和连续食物 离散食物只能按份供应,每种食物有一个质量w 连续食物可以食用任意质量 每种食物有一个初始美味值tt和一个美味值衰减系数△t\triangle t 对于一种离散食物,如果你吃了NN份,那么获得的美味值为∑Ni=1(t−(i−1)△t)\sum_{i=1}^N(t-(i-1)\triangle t) 对于一种连续食物,如果你吃的质

2015-05-27 12:54:31 12013

原创 BZOJ 2613 Poi2003 Shuffle 数论

题目大意:给定一个长度为nn的置换bb和一个正整数kk, 求一个置换aa,使得ak=ba^k=b要做这个题首先我们需要知道aka^k是什么 想象一个长度为LL的循环,如果我们将这个循环求kk次方,我们将会得到Gcd(L,k)Gcd(L,k)个长度为LGcd(L,k)\frac L{Gcd(L,k)}的循环 那么现在我们将bb分解成循环,假如现在我们得到了一个长度为L′L'的循环,那么由之前的

2015-05-25 20:55:22 1742

原创 BZOJ 4077 Wf2014 Messenger 二分答案+计算几何

题目大意:给定两条折线,Alice沿着第一条折线走,Bob沿着第二条折线走,邮递员从Alice路径上的任意一点出发,沿直线走到Bob的路径上后刚好和Bob相遇,三人的速度都是1m/s1m/s,求邮递员走的最短距离,无解输出impossible二分答案,然后让Bob提前出发midmid,然后求出Alice和Bob全程的最短距离,判断是否≤mid\leq mid就行了 无解比较难办,反正我是提前判断了

2015-05-25 12:30:19 1654

原创 BZOJ 3779 重组病毒 LCT+线段树维护DFS序

题目大意:给定一棵树,初始每个点都有一个颜色,支持三种操作: 1.将某个点到根的路径上所有点染上一种新的颜色 2.将某个点到根的路径上所有点染上一种新的颜色,然后把根设为这个点 3.定义一个点的代价为这个点到根路径上颜色的种类数,求某个点子树中所有点代价的平均值我真是炖了狗了…… 容易发现这玩应就是个LCT,操作1就是Access,操作2就是Move_To_Root,代价就是一个点到根路径上

2015-05-22 17:18:47 2492

原创 BZOJ 4080 Wf2014 Sensor Network 随机化

题目大意:给定平面上的nn个点,求一个最大的点集,使得两两之间距离不超过dd爆搜T到死,加什么剪枝都没用……随机化大法好每次随机一个序列,依次贪心加入,然后更新答案据说很靠谱?反正写完直接过了#include <bitset>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M

2015-05-22 14:03:13 1910

原创 BZOJ 4082 Wf2014 Surveillance 树上倍增

题目大意:给定一个nn个点的环,有kk个区间,要求选择最少的区间覆盖所有点首先我们考虑链上版本,显然我们有一个贪心的做法: 从1号节点开始,每次选择能向后走的最远的区间,直到走完所有节点为止 正确性显然 但是到了环上版本我们却不能直接套用这个算法,因为环上不存在所谓的“1号节点” 因此我们这样做: 拆环后将序列倍增,把所有区间按照右端点从小到大排序 每个区间向这个区间右端点向后能走的最远

2015-05-22 13:41:34 2246 1

原创 BZOJ 1140 POI2009 KOD 编码 DFS

题目大意:给定一棵二进制编码树,保证每个节点要么有2个儿子,要么没有儿子,每个叶节点代表一个字符,求有多少字符满足即使前面被删掉一个前缀,只要这个字符的编码没有被破坏,就可以保证后面的编码都解读正确先说下这个做法是可以被卡的……首先我们可以发现这样的字符满足【编码树上根节点+任意一个后缀+一些完整的子串+这个字符的转移都能到达一个叶节点】然后打几个标记爆搜就行了……然而这样做的复杂度是∑sizei\

2015-05-20 20:20:11 1609

原创 BZOJ 1137 POI2009 Wsp 岛屿 半平面交

题目大意:给定一个凸nn边形,从点11走到点nn,有一些边不能走,若两条边相交可以变道,求最短路MD这水题看错题困扰了我多年= = 一直以为是补图的最短路……最短路显然是半平面交 从一个点出发的所有边中只有最后一条可能在半平面交上 然后就完事了啊= =#include <cmath>#include <vector>#include <cstdio>#include <cstring>

2015-05-20 11:16:55 1787

原创 BZOJ 1138 POI2009 Baj 最短回文路 BFS

题目大意:给定一张有向图,每个点有一个字符,多次求两点的最短回文路据说这道题第一次做的人都会T? 一开始的思路是这样的:令fx,yf_{x,y}表示从点xx走到点yy的最短回文路径,转移fx,y=min{fz,w+2|x−c−>z,w−c−>y}f_{x,y}=min\{f_{z,w}+2|x-c->z,w-c->y\} 然后广搜,果断T了= =冗余的转移太多了…… 正解是这样的: 令gx,

2015-05-19 18:48:21 1906

原创 codeforces 432E Square Tiling 贪心

题目大意:给定一个n∗mn*m的矩阵,要求用正方形砖块覆盖,使得任意两块同颜色的正方形砖块不相邻且字典序最小枚举每一块砖,如果这个位置为空,就填入字典序最小的砖块,然后将边长一格格拓展 如果当前右侧位置可以填入字典序更小的砖块,就不拓展 否则判断能否拓展并拓展#include <cstdio>#include <cstring>#include <iostream>#include <al

2015-05-19 10:56:31 1423

原创 codeforces #468C Hack it! 构造

题目大意:令f(x)f(x)为xx每一位上的数字之和,现在给定nn,求一个区间[l,r][l,r],使得∑ri=lf(i) mod n=0\sum_{i=l}^r f(i)\ mod\ n=0 sy在Wc讲的一道题= = 当10k>x10^k>x时f(10k+x)−f(x)=1f(10^k+x)-f(x)=1 因此设sum=∑10ki=1f(i)sum=\sum_{i=1}^{10^k}f(i

2015-05-19 09:29:26 2308

原创 codeforces #271E Three Horses 数论

题目大意:有一种卡片,正面和背面各写着一个整数,可以用一个有序数对(x,y)(x,y)表示 有三种操作: 1.出示一张卡片(x,y)(x,y),获得一张卡片(x+1,y+1)(x+1,y+1) 2.出示一张卡片(x,y)(x,y(x,y)(x,y都是偶数)),获得一张卡片(x2,y2)(\frac x2,\frac y2) 3.出示两张卡片(x,y)(x,y)和(y,z)(y,z),获得一张

2015-05-18 17:54:36 1276

原创 codeforces #306D Polygon 构造

题目大意:给定nn,要求构造一个凸nn边形,使得每个内角都相同,每条边长度都不同 膜拜题解 其实我一开始想的是构造一个正nn边形然后把每条边微移一下……不过似乎不是很好写的样子= =#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 110

2015-05-18 15:54:39 1423

原创 codeforces #303A Lucky Permutation Triple 构造

题目大意:给定nn,要求构造三个00~n−1n-1的排列A,B,CA,B,C,使得对于任意i(i∈[0,n−1])i(i\in[0,n-1])满足Ai+Bi≡Ci(mod n)A_i+B_i≡C_i(mod\ n) 首先我们来考虑nn是奇数的情况。以n=7n=7为例 A 0 1 2 3 4 5 6A\ 0\ 1\ 2\ 3\ 4\ 5\ 6 B 6 4 2 0 5 3 1B\ 6\ 4\ 2\

2015-05-18 13:17:59 1376

原创 将01矩阵转化为bitmap文件

在OI中我们经常会遇到一类题目,形式如下: 给出一个由0和1组成的点阵图,要求你进行一些类似图像识别的操作 而且这类题通常分为两类: 1.提交答案题 2.不可做题 对于提交答案题,往往提供的输入数据都非常大,很难用眼睛看出答案 然而如果我们能用图像处理软件而非文字处理软件分析数据,可能答案就非常好看了 因此我们需要一个能将给出的点阵图转化成bmp文件的东西= = 于是我就去稍微研究了

2015-05-16 21:04:33 1492

原创 codeforces #398C Tree and Array 构造

题目大意:给定一棵nn个点的树和一个数组,数组初始为空,然后进行以下操作: 对于每条边(x,y)(x<y)(x,y)(x<y),如果这条边边权为zz,就在数组中将[x,y][x,y]区间内的每个数+z+z 操作结束后统计数对(x,y)(x<y)(x,y)(x<y),满足在树上xx和yy之间的路径上的权值和等于数组上[x,y][x,y]的区间和 现在给定nn,要求构造一棵nn个点的树,满足这样的

2015-05-16 15:49:14 1156

原创 codeforces #402C Searching for Graph 构造

题目大意:给定nn和pp,我们需要构造一张点数为nn,边数为2n+p2n+p的简单无向图,满足任意一个点数为kk的子图的边数不超过2k+p2k+p逗B题……我们只需要把字典序最小的2n+p2n+p条边输出就行了 下面我们来证明这么做是对的首先这个条件等价于【删掉任意kk个点,都有至少2k2k条边被跟着删掉】 然后我们来看这样一个图: 显然这个图是我们构造的图的子图 下面我们来证明这个性质

2015-05-15 20:42:21 1589

原创 BZOJ 4033 HAOI2015 T1 树形DP

题目大意:给定一棵树,你需要把其中的kk个点染成黑色,使得黑色点两两之间的距离和+白色点两两之间的距离和最大,求最大值 题解戳这里 Orz ydcydc 看来我对于非线性的树形DP还是做得太少了QwQ#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 2020using

2015-05-15 13:54:17 2554

原创 BZOJ 2276 Poi2011 Temperature 单调队列

题目大意:给定一个序列,每个元素的大小有一个取值范围,求一段区间满足区间内元素可能单调不降 对LL维护一个单调不增的单调队列,一旦新插入的RR值比队头的LL值小就把队头弹掉 这样可以保证单调队列中的元素是合法的极大子区间 然后更新答案就行了 乱写读入优化害死人啊QwQ#include <cstdio>#include <cstring>#include <iostream>#inclu

2015-05-15 12:06:08 1551

原创 BZOJ 2959 长跑 Link-Cut-Tree+并查集

题目大意:给定n个点,支持以下操作: 1.在某两个点之间连接一条无向边 2.改变某个点的权值 3.将每条边设定一个方向,然后从xx走到yy,求能经过的所有点的权值和 首先如果这个图是静态的,我们把边双都缩点,那么每次询问显然就是两个点所在边双路径上的点权和 现在图是动态的,因此我们用动态树维护一下就行了 如果连边的两个点不连通,就在LCT中连接这两个点 如果连边的两个点已经连通,就将这

2015-05-15 10:49:20 2279

原创 BZOJ 3308 九月的咖啡店 费用流

题目大意:在[1,n][1,n]区间内选择一些数,使得这些数两两互质,求这些数的和的最大值容易发现对于一个最优解,每个质数存在且仅存在于一个数中。(废话。 但是有可能一个数中存在多个质数 下面是两个结论: 1.一个数中最多存在两个不同的质数 2.这两个质数一个<n√<\sqrt n,一个>n√>\sqrt n 我完全不会证明这两个结论,这两个结论都是官方题解里的 然后就好办了,我们对于<

2015-05-14 20:18:55 3075 2

原创 BZOJ 3004 吊灯 树形DP

题目大意:给定一棵树,要求将这棵树分成nk\frac nk个连通块,每块大小为kk,求所有可行的kk首先kk一定是nn的约数。(废话 然后我们有一个结论:某个kk满足条件当且仅当存在nk\frac nk个节点满足以每个节点为根的子树大小都是kk的倍数 证明: 首先不可能存在超过nk\frac nk个节点满足以每个节点为根的子树大小都是kk的倍数,这是废话 首先证明必要性: 假设我们已经有了

2015-05-14 14:40:13 1636

原创 BZOJ 3774 最优选择 最小割

题目大意:给定一张网格图,每个点有一个代价和一个收益,如果选择了某个点将会付出这个代价,如果一个点被选择或周围的4个点都被选择那么就会获得这个收益,求最大收益乍一看这个关系中既有【且】又有【或】,没有办法直接建图 但是我们有一个结论: 如果一个点周围的4个点都被选择,那么这个点一定不会被选择 这个结论几乎是显然的,因为如果周围的4个点都选择了的话,选择这个点一定不会产生任何贡献,不如不选然后就

2015-05-14 13:03:44 2239 2

原创 codeforces #8D Two Friends 二分答案+计算几何

题目大意:给定平面上的三个点A,B,CA,B,C,AlanAlan需要从AA走到CC再走到BB,BobBob需要从AA直接走到BB,要求AlanAlan走过的长度不能超过最短路长度+t1t1,BobBob走过的长度不能超过最短路长度+t2t2,求两人在一起最多走多久(分开后再汇合不算一起走)设AlanAlan最多走L1L1,BobBob最多走L2L2 首先如果BobBob能陪伴AlanAlan全程

2015-05-14 11:51:19 1690

原创 codeforces #30E Tricky and Clever Password KMP+Manacher+二分

题目大意:给定一个字符串SS,要求分成A+prefix+B+middle+C+suffixA+prefix+B+middle+C+suffix6段,满足: |A|=|C||A|=|C| |B||B|为奇数 A+B+CA+B+C为回文串 除BB外所有段长度都可以为00 要求最大化|A|+|B|+|C||A|+|B|+|C|,输出一组方案(|A|=|C|=0|A|=|C|=0时只输出BB)首先

2015-05-13 17:50:17 3143

原创 codeforces#36E Two Paths DFS

题目大意:给定一张n=10000,m<=10000n=10000,m<=10000的图,要求将这张图分割成两条不相交、不重复的路径,输出任意一组方案或无解蛮水的一道题- - 首先m=1m=1一定无解 然后判断有效点的连通块数,若≥3\geq 3则无解 若连通块数量为22,则这两条路一定是每个连通块中的一条欧拉通路 若连通块的数量为11,讨论: 若度数为奇数的点>4>4,无解 若度数为奇数

2015-05-13 15:44:40 1718

原创 codeforces #460D Little Victor and Set 构造

题目大意:给定一个区间[l,r][l,r],你需要在这个区间中选择最多kk个不同的数,使得异或和最小当r−l+1≤4r-l+1\leq4时,暴力枚举集合即可 当r−l+1≥5r-l+1\geq5时,讨论: 若k≥4k\geq4,则[l,r][l,r]中一定存在一组数为2k,2k+1,2k+2,2k+32k,2k+1,2k+2,2k+3,故答案为0 若k=1k=1,则只能取ll 若k=2k=2

2015-05-13 11:21:49 1411

原创 BZOJ 3307 雨天的尾巴 线段树

题目大意:给定一棵树,有mm个操作,每次给一条路径上的每个点分发一个颜色为zz的物品,所有操作结束后输出每个点上数量最多的是哪种物品 对于每个操作,我们在xx和yy上各打上一个插入zz的标记,然后在LCA(x,y)LCA(x,y)和Fa(LCA(x,y))Fa(LCA(x,y))上各打上一个删除zz的标记 然后我们对zz维护线段树 DFS一遍,对于每个节点进行如下操作: 1.将所有子节点的线

2015-05-12 20:20:30 1884 2

原创 BZOJ 4025 二分图 分治+并查集

题目大意:给定一张nn个点的图,有mm条边,TT个时间段,每条边只存在于(st,ed](st,ed]这些时间段,求每个时间段内这个图是否是二分图 分治并查集大法好 定义Solve(x,y,E)Solve(x,y,E)为当前处理的区间为[x,y][x,y],EE为所有存在时间为[x,y][x,y]的子集的边的集合 那么对于EE中的每一条边(u,v)(u,v),讨论: 若当前边的存在时间为[x,

2015-05-12 16:55:42 4706

原创 BZOJ 4027 HEOI2015 兔子与樱花 树形贪心

题目大意:给定一棵有根树,每个点上有一些樱花,现在要求删除一些节点,删除节点的樱花和子节点都会连到父节点上,要求每个节点的樱花数+子节点数不超过mm,求最多删多少个节点这数据范围也只能贪心了吧= = 令fif_i为以节点ii为根的子树中能删除的最多节点(ii节点不删),gig_i为删除最多节点的情况下ii号节点的最小负重 那么首先对于每个节点我们对于所有的子节点为根的子树尽量删,然后考虑如何删除

2015-05-05 19:35:03 1750 2

原创 BZOJ 4052 Cerc2013 Magical GCD

题目大意:给定一个序列,求一个连续子序列,使得序列长度*GcdGcd最大 考虑以某个位置结尾的所有连续子序列,我们会发现不同的GcdGcd不会超过log2nlog_2n个 于是暴力即可= =#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 100100using nam

2015-05-05 13:19:08 1749

原创 BZOJ 4034 HAOI2015 T2 DFS序+线段树

题目大意:给定一棵树,每个点有点权,支持下列操作: 1.某个点的点权+a 2.某棵子树所有点权+a 3.查询某个点到根路径上的点权和 这个用入栈出栈序就可以了 入栈为正,出栈为负,那么一个点到根路径上的权值和就是入栈出栈序中[1,入栈位置]的和 而子树在入栈出栈序中是连续的,因此用线段树维护一下就可以了 (似乎只要无脑链剖就可以了?#include <cstdio>#include

2015-05-03 20:01:41 2462

原创 BZOJ 1603 Usaco2008 Oct 打谷机 DFS

题目大意:给定一棵树,每个点是一个齿轮,1号齿轮顺时针旋转,每条边有同向和反向两种连接方式,求n号齿轮的旋转方向 DFS一遍即可#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 1010using namespace std;struct abcd{ int t

2015-05-03 15:28:15 1186

原创 BZOJ 1600 Usaco2008 Oct 建造栅栏

题目大意:给定一个长度为nn(n≤2500n\leq 2500)的木板,要求分成4部分拼成一个面积为正的四边形,求方案数 能拼成一个面积为正的四边形等价于任意一个木板的长度<n2<\frac n2 切割点有3个,前两个枚举,第三个O(1)计算即可 时间复杂度O(n2)O(n^2)#include <cstdio>#include <cstring>#include <iostream>#

2015-05-03 15:17:05 1334

空空如也

空空如也

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

TA关注的人

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