省选
文章平均质量分 79
huanghongxun
这个作者很懒,什么都没留下…
展开
-
BZOJ 1024 SCOI2009 生日快乐 暴力搜索
奇怪以前做了却没写题解..强行爆搜保平安。#include #include using namespace std;double dfs(double x, double y, int t) { if (t == 1) return max(x / y, y / x); double mi = 1e18; for(int i = 1; i <= t /原创 2016-01-30 12:34:36 · 437 阅读 · 0 评论 -
BZOJ 4514|SDOI 2016|数字配对|筛法|费用流
任意两个符合条件的数字,指数之和只差1,因此形成了二分图,每个点的可选择次数为bib_i,因此考虑费用流, <s→i,cap:bi,cost:0>(ai的指数之和为奇数<s\rightarrow i, cap: b_i,cost:0>(a_i的指数之和为奇数 <i→t,cap:bi,cost:0>(ai的指数之和为偶数)<i\rightarrow t,cap:b_i,cost:0>(a_i的指数原创 2016-04-28 15:43:46 · 759 阅读 · 0 评论 -
BZOJ 4517|SDOI 2016|排列计数|错排公式|组合数学
求满足恰好m个数字使其元素和位置序号不同的全排列的个数。对于简单的错排问题,全部数字序号不同的排列数字个数定为D(n)D(n)。 长度为N的数列,元素1有n-1种放法,对于剩下的n-1个元素,如果元素1放到了位置k,那么元素k放在1,那么剩下的即为D(n−2)D(n-2),否则D(n−1)D(n-1)。 求得D(n)=(n−1)[D(n−2)+D(n−1)]D(n)=(n-1)[D(n-2)+D原创 2016-04-28 10:23:51 · 869 阅读 · 0 评论 -
BZOJ 1854|SCOI 2010|游戏|并查集
如果把不同武器之间的边连起来跑一边DFS是30%的数据。 但是一定要是不同武器之间连边么?武器内的两个值?连边后发现了性质:如果连通块形成了环,那么全部点都可以满足,否则满足n-1个,肯定是最大的那个不能满足。 因此考虑并查集维护连通块,合并的时候给小的打标记,形成环时,给最大的打标记。 那么从1开始一直往后直到没有标记这段点就是答案。#include <stdio.h>#define FO原创 2016-04-27 16:08:08 · 532 阅读 · 0 评论 -
BZOJ 2342 SHOI 2011 双倍回文 Manacher
在Manacher处理出所有极长回文子串后。 枚举双倍回文子串的中心i,考虑快速查询出中心左侧的其他回文中心j,并满足:j+pj≥i,j−pj≥i−pij+p_j\geq i,j-p_j\geq i-p_i 即j+pj≥i,j≥i−12pij+p_j\geq i,j\geq i-\frac{1}{2}p_i 枚举的中心肯定都在#上。 发现由于i是单调增的(我们这么枚举),而j+pjj+p_j原创 2016-04-10 13:13:29 · 621 阅读 · 0 评论 -
BZOJ 3571|HNOI 2014|画框|最优匹配|计算几何
求最大匹配,使得选中匹配边的权值a的和与权值b的和的积最小。考虑方案(∑ai,∑bi)(\sum a_i,\sum b_i) ,其在反比例函数ans=xyans=xy上,显然在这个函数的右上方的点都比当前方案更优,因此所有可能的答案都在这个下凸壳上,考虑枚举下凸壳上的点,发现如果我们连接下凸壳两端点,那么离连线最远且最靠近原点的点肯定在下凸壳上,因此考虑分治。 (摘自:http://blog.cs原创 2016-04-26 22:46:10 · 576 阅读 · 0 评论 -
BZOJ 4539|HNOI 2016|树|可持久化线段树|LCA ******
待续。。#include <cstdio>#include <algorithm>using namespace std;const int N = 100005, M = N * 2;typedef long long ll;struct Seg { Seg *lc, *rc; int sz; ll sum; Seg() { lc = rc = this; sum = s原创 2016-04-24 23:58:57 · 546 阅读 · 0 评论 -
BZOJ 3992 SDOI 2015 序列统计 NTT 生成函数 计数 原根
给定元素在[0,m)内的整数集合S,求有多少个长度为n的数列满足所有元素属于S且mod m下的积为x。由于m是质数,所以元素的积利用原根可转化为和。 即∏ei∈seqei≡xmodm\prod_{e_i\in seq} e_i \equiv x\mod m 由于原根的幂可以一一表示[0,m)内的数,所以 令hi,hx满足ghimodm=ei,ghxmodm=xh_i,h_x满足g^{h_i}原创 2016-03-27 22:17:40 · 975 阅读 · 0 评论 -
BZOJ 1856 SCOI 2010 字符串 卡特兰数
出入栈问题。。。 ans=(n+mn)−(n+mn+1)ans=\binom{n+m}{n}-\binom{n+m}{n+1} 于是直接算就好了。。没用分解因数的,于是150ms。。。#include <cstdio>#include <cstdlib>typedef long long ll;const ll mod = 20100403;ll quick_pow(ll a, ll b原创 2016-03-27 12:07:24 · 512 阅读 · 0 评论 -
BZOJ 1041 HAOI 2008 圆上的整点 数学推导
如果某整数xx代入圆方程得到的yy是整数就计入。 坐标轴上必有4个点,而且四象限对称,所以规定x,y≥1x,y\geq 1 ∵x2+y2=r2\because x^2+y^2=r^2 ∴y2=r2−x2\therefore y^2=r^2-x^2 ∴y2=(r−x)(r+x)\therefore y^2=(r-x)(r+x) ∴y=(r−x)(r+x)−−−−−−−−−−−√\theref原创 2016-03-27 11:28:57 · 503 阅读 · 0 评论 -
BZOJ 1997 HNOI 2010 Planar 2-SAT
已知图和其哈密尔顿回路,判断是否是平面图。平面图要求边不相交,而哈密尔顿回路是圈(废话),其他的边都可以看作是在圈上,那么问题就变成POJ 3207了。。。但是发现构出来的图是无向图所以并查集就好了 然而并查集比Tarjan慢,毕竟复杂度多了个logn\log nTarjan:#include <cstdio>#include <algorithm>#include <cstring>usi原创 2016-03-27 10:50:37 · 432 阅读 · 0 评论 -
BZOJ 1823 JSOI 2010 满汉全席 2-SAT
水题。。貌似和POJ某题很像,输入也很像。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ms(i) memset(i,0,sizeof i)#define rep(i,j,k) for(i=j;i<k;++i)const int N = 1005, M = 60000原创 2016-03-27 10:10:19 · 550 阅读 · 0 评论 -
BZOJ 3626 LNOI 2014 LCA 树链剖分
q个询问统计编号[l,r]内的点与某个点z的LCA的深度和。任何点与z的LCA都在z到根的路径上。3626: [LNOI2014]LCADescription给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。 有q次询问,每次询问给出l r z,求sigm原创 2016-04-07 23:22:05 · 550 阅读 · 0 评论 -
BZOJ 4001 TJOI 2015 概率论 卡特兰数 生成函数计数
求随机有根二叉树的叶节点数的期望。令fif_i表示有ii个节点的二叉树的个数,显然f0=1f_0=1,且有递归定义 fi=∑i=0i−1fifn−i−1 f_i=\sum_{i=0}^{i-1}f_if_{n-i-1} 令gk=∑ki=0fifk−ig_k=\sum_{i=0}^{k}f_if_{k-i} 那么数列gg的生成函数即G(x)=F2(x)G(x)=F^2(x) 又fi=gi−1原创 2016-03-24 23:35:56 · 2346 阅读 · 0 评论 -
BZOJ 1031 JSOI 2007 字符串加密 Cipher 后缀数组
咦BZOJ 502了发生了啥。一个循环串子串排序。。恩,联系到后缀数组后缀排序功能。 因此对给出的串重复一遍建立后缀数组。 比如JSOI07的后缀数组就是:0707JSOI0777JSOI07I07I07JSOI07JSOI07JSOI07JSOI07OI07OI07JSOI07SOI07SOI07JSOI07发现,如果一个后缀的长度大于等于原长len,那么其第len个字符原创 2016-02-16 22:11:41 · 620 阅读 · 0 评论 -
BZOJ 3238 AHOI 2013 差异 后缀数组 单调
lcp(Ti,Tj)=min{hi,⋯,hj}lcp(T_i, T_j)=\min\{h_i,\cdots,h_j\} 因此考虑hih_i对于其在hh上所能向左向右延伸的区间内的所有lcp都是其答案。因此参考poj 2796。。 代码稍后3238: [Ahoi2013]差异Time Limit: 20 Sec Memory Limit: 512 MB Submit: 1342 Solved原创 2016-02-15 23:17:39 · 433 阅读 · 0 评论 -
BZOJ 3931 CQOI 2015 网络吞吐量 最大流 最短路
有点迷的题目。。。。#include <cstring>#include <cstdio>#include <algorithm>#include <queue>using namespace std;#define ms(i,j) memset(i,j,sizeof(i))#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 3000,原创 2016-04-06 23:52:41 · 615 阅读 · 0 评论 -
BZOJ 4515|SDOI 2016|游戏|树链剖分
未完待续#include <cstdio>#include <algorithm>#include <cstring>typedef long long ll;using namespace std;const int N = 100005, M = N * 2, S = M * 2;int h[N], p[M], v[M], sz[N], fa[N], cnt, ts;int dep原创 2016-04-28 17:20:11 · 583 阅读 · 0 评论 -
BZOJ 1095 ZJOI 2007 Hide 捉迷藏 动态点分治
动态点分治? 就是内存卡的很紧?用了154MB。。。 第一次写参考了PoPoQQQ大爷的代码。稍后补齐题解。。#include <queue>#include <cstdio>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 100005, M = N * 2;using namespace st原创 2016-03-31 22:13:02 · 1070 阅读 · 0 评论 -
BZOJ 3998 TJOI 2015 弦论 后缀自动机
求第k大子串 http://blog.csdn.net/huanghongxun/article/details/51164051#include <cstring>#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)const int rt = 1, N = 1000005;int last = 1, cnt = 1, len = 0原创 2016-04-17 16:20:10 · 626 阅读 · 0 评论 -
BZOJ 2004|HNOI 2010 Day 1|公交线路|状态压缩动态规划|矩阵乘法
原题:小 Z 所在的城市有 N 个公交车站,排列在一条长为 N-1 公里的直线上,从左到右依次编号 为 1 到 N,相邻公交车站间的距离均为 1 公里。 作为公交车线路的规划者,小 Z 调查了市民的需求,决定按以下规则设计线路: 1. 设共有 K 辆公交车,则 1 到 K 号车站作为始发站,N-K+1 到 N 号车站作为终点站。 2. 每个车站必须被一辆且仅一辆公交车经停(始发站和终点站也算原创 2016-03-08 23:53:02 · 740 阅读 · 0 评论 -
BZOJ 4558|JLOI 2016|SHOI 2016|方|容斥原理
题面有毒。。poisonous poi!poi!poi! 注意斜着的正方形也是要算的。如果没有删除点,总的方案数显然是∑i=1min{n,m}i(n−i+1)(m−i+1)modp \sum_{i=1}^{\min\{n,m\}} i(n-i+1)(m-i+1) \mod p i表示有i种斜着的正方形,(n-i+1)表示以(i,k)为左上角的正方形数目,(m-i+1)表示k的数目。接下来考虑每原创 2016-04-28 00:30:38 · 3917 阅读 · 0 评论 -
BZOJ 4562|HAOI 2016|食物链|动态规划
写水题掉RP啦 我记得这个还是去年学长研究性学习的内容之一。。不过很水就是了。。 DAG DP。。懒得写拓扑排序了(和DP融为一体)#include <stdio.h>const int N = 100005, M = N * 2;int dp[N], h[N], p[M], v[M], in[N], entry[N], cnt = 0;void add(int a, int b) {原创 2016-04-27 21:42:35 · 1267 阅读 · 0 评论 -
BZOJ 1483|HNOI 2009|梦幻布丁|Set
给定初始序列,每个元素有个颜色,查询不同颜色块的个数,或合并两个颜色。合并操作要把小的合并到大的上去,这样连续区间的长度至少会翻倍,复杂度O(nlogn)O(n\log n) 但是我用的是set。。应该是O(nlog2n)O(n\log^2n)了。。#include <cstdio>#include <set>#include <algorithm>using namespace std;原创 2016-04-24 23:49:28 · 398 阅读 · 0 评论 -
BZOJ 4538|HNOI 2016|网络|树链剖分
题目问的是,实时修改路径最大值,求不经过某点的路径最大值。 反过来想,维护不经过路径的最大值,求经过某点的最大值。于是树链剖分即可解决。 卡着时间过了。。烦,BZOJ的编译器太老 vector#include <cstdio>#include <set>#include <vector>#include <algorithm>using namespace std;const int原创 2016-04-23 23:43:22 · 704 阅读 · 0 评论 -
BZOJ 2028|SHOI 2009|会场预约|平衡树
【问题描述】A 大厦有一间空的礼堂,可以为企业或单位提供会议场所。这些会议中的大多 数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议 的时间申请不能冲突。也就是说,前一个会议结束日期必须在后一个会议的开始日期之前。 所以,如果要接受一个新的场地预约申请,就必须拒绝掉与这个申请相冲突的预约。 一般来说,如果 A 大夏方面事先已经接受了一个会场预约,例如从 10原创 2016-04-23 08:39:41 · 972 阅读 · 0 评论 -
BZOJ 4540|HNOI 2016|序列|线段树|离线
好像aia_i没有什么特别的地方?考虑将右端点的区间拆成[1,r2]−[1,l2)[1,r_2]-[1,l_2)。 然后我们就可以枚举右端点了。 此时左端点有个区间[l1,r1][l_1,r_1]而对于最大值,其可以向左向右延伸,而左右不相互影响,因此考虑左右扫一遍,能延伸到的最远的地方单调栈就可以处理。#include <cstdio>#include <algorithm>using n原创 2016-04-22 13:13:02 · 786 阅读 · 0 评论 -
BZOJ 1018|SHOI 2008|堵塞的交通|线段树
咦,一道自带题解的题目?题目的坐标表示成(r,c),r=row,行号,c=column,列号。 因此x1,x2只有取1和2两种情况………考虑线段树维护一格的连通性,合并区间如图: 令总的为r,左半区间a,右半区间b,修改了mid(x,y)。 那么对于r0(上);r1(下);r2(左);r3(右);r4(右下);r5(右上)r_0(上);r_1(下);r_2(左);r_3(右);r_4(右下原创 2016-04-21 21:07:21 · 766 阅读 · 0 评论 -
BZOJ 2337|HNOI 2011|XOR和路径|概率期望|高斯消元
给定无向联通图,从1点等概率地向相邻点移动,求1点到N点的路径边权xor和的期望值。位运算一般拆位看。 对于每位的期望值显然有 E(u)=∑wu,v=0E(v)+∑wu,v=1[1−E(v)]di E(u)=\frac{\sum_{w_{u,v}=0}E(v)+\sum_{w_{u,v}=1}[1-E(v)]}{d_i} 0 xor i=i0 \text{ xor } i=i 1 xor i=原创 2016-04-21 15:40:25 · 590 阅读 · 0 评论 -
BZOJ 4521|CQOI 2016|手机号码|数位DP
满足长度10位,至少出现3个相邻相同数字,不能同时出现8和4,最高位不为0,在[L,R]内的数字个数。令dp[前i位][目前位为j][已有连续位k][4和8的状态s][是否已经比原数小t]dp[前i位][目前位为j][已有连续位k][4和8的状态s][是否已经比原数小t]dp[前i位][目前位为j][已有连续位k][4和8的状态s][是否已经比原数小t] 枚举贡献的下一个状态的目前位为b。 ...原创 2016-04-21 11:52:49 · 668 阅读 · 0 评论 -
BZOJ 4523 CQOI 2016 路由表 字典树
读入稍微有点麻烦。。 BZOJ的大数据好评233。 原来的样例是:11A 0.0.0.0/8Q 1.2.3.4 1 1A 1.0.0.0/9A 1.128.0.0/10A 1.0.0.0/10A 1.0.0.0/8Q 1.2.3.4 1 5A 1.2.0.0/16A 1.2.3.1/32Q 1.2.3.4 5 7Q 1.2.3.1 5 7很显然是字典树了吧。 对于每个A,原创 2016-04-19 15:26:56 · 571 阅读 · 0 评论 -
BZOJ 3130 SDOI 2013 最大流
Bob:显然使流量最大的边,费用为p即可。Alice:二分最大边。#include #include #include #include using namespace std;const int N = 1005, M = 2005;namespace Graph { int head[N], next[M], to[M], vis[N], cur[N], level原创 2016-01-17 18:12:40 · 494 阅读 · 0 评论 -
BZOJ 4524 CQOI 2016 伪光滑数 暴力
priority_queue q;int main() { scanf("%lld%d", &n, &m); rep(i,2,128) if (!v[i]) for (p[++tot] = j = i; j 128; ++j) v[j] = 1; FOR(i,1,tot) for (x=j=1;x1,i)); while(m原创 2016-04-18 22:01:55 · 987 阅读 · 0 评论 -
BZOJ 3504 CQOI 2014 危桥 最大流
因为是双向的,因此来回an次和单向走2*an次是等价的。。 然后构图跑最大流即可。 危桥容量2,普通的容量inf。然后流的方向可能有问题。。 如果a1跑到b2就搞笑了。倒过来做一下就好听说是SHOI 2016 Day2 T3。。。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;con原创 2016-04-18 20:52:14 · 615 阅读 · 0 评论 -
BZOJ 1016 JSOI 2008 巨额奖金 最小生成树计数
最小生成树有多少个。注意到最小生成树中选了相同权值的边多少条是不变的。有kruskal可知。 因此考虑在求出最小生成树后枚举每种权值的边。 然后所有情况乘起来即可。#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)#def原创 2016-04-17 23:56:06 · 840 阅读 · 0 评论 -
一个斜率优化?
一个N*M棋盘每格有一个数字,用p个同半径的已知圆心的圆覆盖棋盘,求最小半径使得覆盖方格数字和不少于k。 1≤n,m≤1000,1≤p≤1091\leq n,m\leq 1000,1\leq p\leq 10^9求一些圆怎么覆盖棋盘,不如考虑方格怎么会被圆覆盖,所以可以求离方格最近的圆心。先考虑一行内。求一行内每个方格距离最近的圆心的距离的平方,显然正反扫两遍即可。 令g[i][j]g[i][j原创 2016-03-05 22:46:07 · 293 阅读 · 0 评论 -
BZOJ 1996 HNOI 2010 chorus 合唱队 区间DP
发现每次都只在最左最右加一个数字,因此可以用区间DP。如果我们已经知道了区间[i,j]的方案数,而且是在区间前面加了数字,那么其能贡献的区间有:[i,j+1](aj+1>ai)[i,j+1](a_{j+1}>a_i)[i−1,j](ai−1<ai)[i-1,j](a_{i-1}<a_i)相对的在后面加了数字也类似。 那么就好办了,需要三维表示状态区间左右端点以及在前还是后加了数字。方程就按照原创 2016-02-28 12:17:33 · 488 阅读 · 0 评论 -
BZOJ 1863 ZJOI 2006 皇帝的烦恼 二分答案
一个简单骗分就是ans=max{a1+an,ai+ai+1}ans=\max\{a_1+a_n,a_i+a_{i+1}\}。经测试50分。。。似乎有人多对了一个点,不知道有啥特别的技巧? 不妨考虑一下如何判定答案ans,即1与n的最小冲突个数是否为0。 令mi[i]表示1与i的最小冲突个数,ma[i]表示1与i的最大冲突个数。那么有: 最多能冲突那么就是全部都冲突了或是分了上一个冲突了的。原创 2016-02-28 11:04:04 · 944 阅读 · 0 评论 -
BZOJ 1044 HAOI 2008 木棍分割 二分 贪心 动态规划
真是心烦。。似乎一个sb用脚本拼命交30s的while(1)程序卡评测。。这种缺智商的大抵也就会卡oj了。明明有80s的250s的去卡30s的第一问 二分贪心即可得到答案max_cut。 第二问 令f[i][j]f[i][j]表示前i根切j次的方案数。那么显然有 f[i][j]=∑f[k][j−1](a[k+1]+⋯+a[i]≤max_cut)f[i][j]=\sum f[k][j-1](a[k原创 2016-03-12 20:36:51 · 676 阅读 · 0 评论 -
BZOJ 2732 HNOI 2012 射箭 半平面交
题意构造一个二次函数使其能依次穿过更多的竖向线段。题解题目要求最大化 kk,我们可以转化为判定性问题。 发现对于一个线段 [(x,y1),(x,y2)][(x, y_1), (x, y_2)],二次函数解析式 y=ax2+bxy=ax^2+bx 满足y1≤y≤y2y_1\leq y\leq y_2。其中 aa 和 bb 都是变量。 问题转为线性规划判定是否有解。利用半平面交解决。 那么对于 x原创 2016-01-08 22:05:52 · 483 阅读 · 0 评论