自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 华容道

华容道最优解,请将代码末的棋盘输入,程序会打印每一步走法。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define RepE(i, x

2016-06-11 12:09:15 1137 4

原创 【SRM 565 UnknownTree】计数 分类讨论

一个有N + 3个点的树,告诉你123号点到其他点的距离,求合法的边权为正整数的树个数。#include #include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y

2016-01-12 16:33:21 723

原创 【codeforces 576D】LCS Again

给一个串,问有多少和它长度相同的串,使得LCS为l - 1。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define RepE(i,

2016-01-12 09:50:07 875 1

原创 【VOJ1895】 ニニスの守護 后缀数组 DP

有一个十进制数字符串S,它是由一个严格上升的数列A拼接而成,要求你构造A使得:1. 最后一个数最小2. 在1的基础上字典序最大#include #include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y)

2016-01-11 10:30:13 645

原创 【Topcoder SRM 641】BitToggler 期望 高斯消元

有一个长度为n的01数列a和一个指针,每次随机将指针移至j,并将aj取反,花费为|i - j|,当数列全0或全1停止,求期望花费。n 使用期望的线性性,每次只统计i到j的贡献,这样其他位置就没有区分了,压个状态就可以消元了。#include #include #include #include #include #include #define Rep(i, x,

2016-01-08 13:24:17 907

原创 【NOI2015】小园丁与老司机 DP 网络流

一开始你在原点,有n棵许愿树,你每次可以向左,右,左上,右上,上到达最近的一棵许愿树许愿。问最多能到达多少许愿树,输出方案。在所有可能的路径中,保留所有非左右的边,问最小路径覆盖所有的边。n 首先按y坐标排序,使用map进行转移,同层的点一起转移。建出第三问的图后,考虑一个点的入度和出度,如果路径不可相交,答案就是Σmax(in[x] - out[x], 0),考虑增建平行边,就可以网络流

2016-01-06 07:32:43 2219

原创 【Bestcoder 68C】function 莫比乌斯函数

已知 n2−3n+2=∑d|nf(d) n^2 - 3n + 2 = \sum_{d | n} f(d) 求 ∑ni=1f(i) \sum_{i=1}^{n}f(i) n <= 10^9 莫比乌斯反演得:f(n)=∑d|ng(d)∗mu(n/d) f(n) = \sum_{d|n}g(d)*mu(n/d) ∑i=1nf(i)=∑i=1ng(i)∗∑j=1n/imu(j) \sum_{i

2016-01-04 15:12:40 684

原创 【bzoj3992】序列统计 FFT 原根

给一个集合,用这个集合组成的长度为n的序列中,在mod m下乘积为x的个数。n 首先可以把乘积变为原根的指数相加的形式,然后取模FFT即可。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for

2016-01-04 14:35:58 825

原创 【bzoj 3615】MSS 分块 线段树的合并和拆分

二维坐标上有n个点,每维坐标互不相同。初始时每个点为一个独立的集合,要求维护:合并两个集合将集合id某一维以v为界拆分为两个集合将集合x的数都加d询问一个集合的sum,max,min考虑按x坐标分块,对每个集合,每块建一个线段树。/************************************************************** P

2015-12-28 10:59:33 694

原创 Polya定理

burnside引理:在一个置换群上的等价类为:(1 / n) * sigma(一个置换的不动点个数)对于旋转的问题,暴力统计要枚举每种置换,则循环节长度为(n, i),可以发现只要枚举n的约数k,统计后乘上phi(n / k)即可。对于翻折是和奇偶有关, 通常有ans[n] = (1/2) * (f[n] + f[ floor(n + 1 / 2) ]),有时需根据奇偶分类处理。

2015-12-24 09:09:25 610

原创 【WC2013】糖果公园 树上莫队

树上莫队,将树分块,以x,y为一二关键字,以时间为第三关键字。暴力修改。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define Re

2015-12-17 18:38:33 979

原创 【bzoj 3815】卡常数

找球面点,用k-d树,在不可能出现的长方体剪枝即可。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define RepE(i, x) f

2015-12-11 13:58:06 1246

原创 【noi2007】生成树计数 连通性DP

有n个点,距离不超过k的有连边,求生成树个数。用最小表示法和矩阵乘法。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define R

2015-11-30 11:32:47 976

原创 【poj 2451】半平面交

注意先弹出队顶,dz #include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define RepE(i, x) for(int i = pos[x]

2015-11-27 15:10:44 489

原创 【bzoj 3821】玄学 线段树

给一个数列ai。要求维护(在线):1.将ai到aj的值变为(ax + b) mod m2.问执行操作i到操作j后ak的权值对操作建线段树,一个线段树节点只在加入操作r后update,一个节点可以用一个长度为O(l)的数组维护,询问时二分下即可。log平方n。#include #include #include #include #include #define Rep(i

2015-11-24 19:02:57 652

原创 【poj3831】Open-air shopping malls

给一些圆,求一个大圆使得对每个圆都覆盖了至少一半,求其最小半径,大圆的圆心要是一个小圆的圆心。直接枚举圆心,二分半径,相交区域是两个拱形。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (

2015-11-16 14:36:20 561

原创 【NOI2014】购票 线段树做法

先推出动态转移方程方程,它有一个距离限制,这一维可以用线段树维护,然后线段树中的凸包要求有回溯操作,这个每次只会修改top和那一为的值,记录一下即可。(bzoj上TLE了。。。

2015-11-09 15:48:58 526

原创 【Spoj COT3】SG函数 Trie启发式合并

给一颗有黑白点的有根树,每次可以选一个白点并将其到根的路径染黑,问先手是否必胜以及第1步的可能选择。子树间相互独立,用Trie维护一个子树操作一次可达SG值,这个用Trie启发式合并可求,需要打标记。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i

2015-11-02 08:12:48 1022

原创 【bzoj1576】[Usaco2009 Jan]安全路经Travel

给一张无向图,1号点到i号点的最短路唯一,求1到i不经过原最短路最后一条边的最短距离。n 由于最短路唯一,先求最短路径树,考虑非树边uv,它能使uv以上,lca以下的点多一种路径,长度为dis[u] + dis[v] + edge[i] - dis[x]。我们令这条非树边的值为val[i] = dis[u] + dis[v] + edge[i],我们只需对每个x,找出最小的val。可以先按va

2015-11-02 07:45:41 1051

原创 【bzoj4150】[AMPPZ2014]The Staging 线段树

在舞台上有n个枪手,第i个枪手瞄准了第p[i]个枪手,将于第u[i]秒开枪。一个枪手如果成功开枪,那么被瞄准的枪手会立刻死亡。现在给出q次修改操作,请在一开始和每次修改操作后统计出最后存活的枪手个数。p[i]互不相同,p[i] != i。首先发现枪手形成若干环。于是可以用线段树维护,一个区间的开头那个人的状态对应结尾的状态,以及存活人数。其他想法:u[i]折线图中只有下降的区间

2015-10-22 16:47:16 820

原创 【hdu4903】The only survival

n个点的完全图,每条边的权值在1~L间,求有多少种图使得1到n的最短路长度为k。n ,k暴力:枚举起点到每个点的最短路di,按di从小到大排序,求出方案。我们并不关心具体点的di,枚举每个di的数量并统计。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <=

2015-10-20 19:58:58 957

原创 【CF 238E】Meeting Her

一张有向图,有k个公交车,每个公交车从si到ti,随机选一条最短路走,求最坏情况从S到T要搭乘几次公交。n 我们记录前k次

2015-10-20 15:22:54 545

原创 【CF 235E】Number Challenge

求    1 ≤ a, b, c ≤ 2000#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (int i = x; i >= y; i --)#define RepE(i, x

2015-10-19 11:34:40 735

原创 【CF325E】The Red Button

一个n个点的图,标号0 ~ n-1,第i个点向2 * i和2 * i + 1连边,构造哈密顿回路。首先发现n为奇数无解。考虑转换为欧拉回路,将2 * i 与2 * i + 1合并为一点,这样点就转化为边了。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y

2015-10-11 10:23:52 621

原创 【bzoj2480】Mod 扩展大步小步

http://blog.miskcoo.com/2015/05/discrete-logarithm-problem #include #include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) for (in

2015-10-09 08:38:44 882

原创 【HDU】5470 Typewriter 后缀自动机+dp

首先暴力的方法就是,对第i个位置,我枚举j(j 幸运的是,区间求最小值不需要线段树(省去一些编程复杂度)。因为当i->i+1时,j是单调不减的!因为如果在添加第i+1个字符时j减小了,那么在第i个字符的时候我们就可以减小,矛盾。这样我们就可以用单调队列来求区间最小值了(单调队列求最小值的原理是维护一个递增的队列,当枚举的左端点大于队列最左端表示的点,就把队列最左端的点丢弃,加入一个点就维护这个

2015-10-02 14:08:04 676

原创 【2012 Semifinal 1】 YetAnotherNim

Description现在有一个博弈游戏。有n堆石子,每堆石子的数量在  之间,其中 .先手先从中选出连续K堆石子,删掉其他的所有堆。后手接着删去任意堆石子,可以不删,但是不能全删。然后两人开始玩NIM游戏。求后手必胜的初始局面数量。Difficulty★★★Main AlgorithmDP 矩乘加速线性代数博弈论Comp

2015-10-01 13:46:24 534

原创 【TCO 2013 WildCard】SemiMultiple

Description定义一个非负数  是  长度下的  的半倍数,为  不是  的倍数,且  是  的倍数。问有多少个  长度下的  的半倍数。DifficultyMainAlgorithm容斥DPComplexitySolution比较难……我们肯定是要对每个余数分别讨论的,可以用  的DP很轻松地把  以下的

2015-09-26 10:06:50 606

原创 【TCO2013 3B】ToastJumping

Description选择尽量少的模长不超过  的整向量,使得他们的和为 .DifficultyMainAlgorithm凸包Minkowski 和ComplexitySolution首先,跳跃一步能跳跃到的点是一个凸包内的整点。然后,由于每一步是相同的,可以证明第  次跳跃产生的图形是第  次跳跃产生的图形与第  次

2015-09-24 16:24:38 665

原创 【TCO2013 Semifinal 2】 OneBlack

Description一个  的网格图,一些格子有障碍。一条合法路径的定义是从  到 的,一共走  步的路径。你要把一些格子染黑,使得每一条合法路径上恰好有一个黑点。问合法方案数。DifficultyMainAlgorithm对偶图DPComplexitySolution首先我们把能从  到的、能到  的点抠出来。其余

2015-09-24 13:53:38 688

原创 【TCO 2013 3A】TrichyInequality

3A TrichyInequalityDescription求出满足 ∑mi=1xi≤s,∀i≤m,xi>0,∀i≤n,xi≤t . 的向量 X 的解数。Difficulty★★★MainAlgorithm矩乘加速ComplexityO((m−n)3logn)Solution标解给的 O((m−n)2) 太科幻了…

2015-09-23 15:41:00 954

原创 【TCO 2012】WildCard SemiMultiple 区间DP

很好的区间DP题目。Description给出两个串A,B。每次可以往A中插入一个字符。将每次操作后的A串记为一个序列。求从A串变为B串的不同序列数量。Difficulty★★★★Main AlgorithmDPComplexitySolution不妨先考虑一个简单的情况,即A为空串。即每次插入一个

2015-09-22 20:50:22 552

原创 【TCO 2013】Litpanels

2B LitPanelsDescription一个  的棋盘,选择两个  的矩形(可以相交),在矩形内任意染黑格子,问最后棋盘状态的方案数。不妨先把结果分类。对答案的状态用一个  的包围盒包裹住,分别讨论  包围盒的方案数。考虑我们需要满足什么条件。1、包围盒的每一条边都必须有至少一个染色点。2、能用两个  的矩形包裹所有染色点。将第二个条件转化一下,考虑到

2015-09-22 15:39:37 509

原创 【TCO2A ThePowers】容斥原理

考虑两个数的次幂得到了相同结果,.则 . 故  是一个整数。同理可证  是一个整数。那么 我们发现,只有有着共同的  的数才会产生冲突。而且冲突的数量与  无关。只与最大的  的次数有关。我们预处理出来拥有  次的  能产生的贡献。即  的不同答案数。其中 .那么就变为  的不同答案数。由于不同的 x 能达到的数不同,为了方便处理,我们分别处理  中的数个数。这部分需要

2015-09-21 19:39:03 480

原创 【hdu5304】生成树计数—基尔霍夫矩阵 DP

给一个无向图,求有多少个子图是基环树。枚举环后缩点,再求生成树计数。2^n枚举环上的点,dp预处理出每个集合的环的个数(默认以编号最小的点为起点),用f[i][s]表示环尾为i,点集为s。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)

2015-09-12 10:32:25 1448

原创 【NOI2014】【cdq点分治】【斜率优化】购票

0.先推出斜率优化的动归方程1.找到当前分治的树结构的重心2.将分成的子树中含有根节点那部分连重心一并分治3.将其余子树的点拎出来,按照能走到的最小深度从大到小排序4.对于每个点,将重心到分治结构的根节点路径上所有的点中能到达的那些点维护一个凸包 然后二分查找5.对其余子树进行分治时间复杂度O(nlog^2n)#include #inclu

2015-08-20 12:50:58 632

原创 HNOI 2015

http://www.cnblogs.com/New-Godess/p/4450078.html/************************************************************** Problem: 4009 User: hzt1 Language: C++ Result: Accepted Time:115

2015-08-16 10:24:31 494

原创 【hdu 5354】Bipartite Graph【分治 并查集】

给一张无向图,问删掉点i后改图是否为二分图。Solve(l, r)表示要求l到r的答案。在并查集中先加上l~mid的边,Solve(mid + 1, r),回溯。同理递归到Solve(l, mid)。并查集要按秩合并。#include #include #include #include #include #define Rep(i, x, y) for (int i = x

2015-08-15 11:17:09 1372

原创 【弱省胡策】Round #0 【Flower Dance】

求有坏点的网格图的从左上角到右下角不相交的两条路径的个数。先求出所有方案减去相交的方案。对于相交方案,将最后一个交点后两人的路径互换。#include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define Dwn(i, x, y) f

2015-08-07 10:52:22 726

原创 【NOI集训】【XJ】状压dp

首先贪心得不会有多于1种不选满(除了强制选的),再dp一下即可。#include #include #include #include #include #include #define Rep(i, x, y) for (int i = x; i <= y; i ++)#define RepE(i, x) for (int i = pos[x]; i; i = g[i].nex

2015-07-05 21:12:27 1023

空空如也

空空如也

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

TA关注的人

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