
BZOJ
文章平均质量分 70
huanghongxun
这个作者很懒,什么都没留下…
展开
-
BZOJ 3550 Vacation 单纯形 费用流
单纯形 744ms AC#include #include const double eps = 1e-7;const double inf = 1e30;#define FOR(i,j,k) for(i=j;i<=k;i++)int read() { int s=0,f=1;char ch=getchar(); for(;ch'9';ch=getchar())if(ch==原创 2015-11-13 22:59:28 · 816 阅读 · 0 评论 -
NOI 2008 志愿者招募 BZOJ 1061
“探究线性规划在信息技术中的应用”论文引用本页,确认作者。原创 2015-11-13 20:56:01 · 732 阅读 · 0 评论 -
BZOJ 2819 Nim 树链剖分
在树上链改+链查Nim游戏是否必胜。如果是在链上的话直接xor一遍不等于0就好了。树上的话树链剖分一下就好。反正bzoj评测机是linux栈大233。不过既然是xor(好像没什么关系),不如树上链查转化成点到根的链查。用树状数组维护一下就好了。#include #include using namespace std;#define FOR(i,j,k原创 2015-11-22 10:27:04 · 547 阅读 · 0 评论 -
数位DP 刷水
Bomb(HDU 3555)#include #define FOR(i,j,k) for(i=j;i<=k;i++)typedef unsigned long long ull;ull dp[32][10];void init() { int i, j, k; dp[0][0]=1; FOR(i,1,25) FOR(j,0,9) { dp[i][j]原创 2015-11-21 12:26:46 · 338 阅读 · 0 评论 -
BZOJ 3262 陌上花开 “树套树”
三维空间内求每个点比它3维都要大的点的个数。第1维排序,第2维树状数组,第3维treap。好像第1维排序就叫做降维了?神tm吧一个数组开错大小老wa。。。cdq分治好像挺好写#include #include using namespace std;int read() { int s=0,f=1;char ch=getchar(); for(;ch'9'原创 2015-11-25 23:09:15 · 604 阅读 · 0 评论 -
BZOJ 4276 费用流+线段树构图
为什么别人22s我37s。。#include #include #include using namespace std;const int N = 205005, M = 500005;const int inf = 0x3f3f3f3f;#define FOR(i,j,k) for(i=j;i<=k;i++)struct CostFlow { int h[N]原创 2016-01-16 22:29:30 · 741 阅读 · 0 评论 -
BZOJ 3674 可持久化并查集加强版 可持久化线段树
和BZOJ 3673一样。可以翻前一篇文章。不过内存问题省去了按大小合并。#include #include #include using namespace std;const int M = 200001;class PersistantArray { struct Node { int v; Node *lc, *rc; }原创 2015-12-30 21:51:54 · 698 阅读 · 0 评论 -
BZOJ 3774 最优选择 最小割
惊了我竟然排Rank 2,咸鱼有朝一日也能翻身。1A 先留个坑#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 5005, M = N * 10, inf = 0x3f3f3f3f;namespace Graph { int head[N], next[原创 2016-01-18 23:06:06 · 451 阅读 · 0 评论 -
BZOJ 4104 [Thu Summer Camp 2015]解密运算
恩。。夏令营。。#include #include using namespace std;const int N = 200001;#define FOR(i, j, k) for (i = j; i <= k; i ++)int a[N], b[N], c[N], d[N], ans[N];bool cmp(int x, int y) { if (原创 2015-12-31 21:44:15 · 711 阅读 · 0 评论 -
BZOJ 3208 花神的秒题计划Ⅰ
暴力大法好。。#include #include #define FOR(i,j,k) for(int i=j;i<=k;i++)#define N 701const int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};int n, a[N][N], b[N][N], f[N][N];void getmax(int &a, int b) {原创 2016-01-01 14:54:14 · 464 阅读 · 0 评论 -
BZOJ 4103 [Thu Summer Camp 2015]异或运算 可持久化Trie
对矩阵求第k大xor值。注意到数据范围长宽严重失调(误所以对于每列维护可持久化Trie。然后查询就由BZOJ 3261推广一下就好啦。#include #include #include const int N = 1001, M = 300001;using namespace std;struct Trie { Trie* c[2]; int size;原创 2016-01-01 17:59:23 · 537 阅读 · 0 评论 -
BZOJ 3261 最大异或和 可持久化Trie
败了败了。。题意很清楚了。只在队尾添加所以上Trie。a[l,r] xor结果在我程序中应该写的是trie[l-2], trie[r-1],然而我写了trie[l-1], trie[r]。。。WAWAWA。。。怎么感觉这个程序对可持久化Trie的包装很怪异,写的很不优雅。。所以参考了popoqqq神的模板。。函数式写法深入我心。#include const int N = 600原创 2015-12-29 21:25:29 · 749 阅读 · 0 评论 -
BZOJ 2741 【FOTILE模拟赛】L 可持久化Trie 分块
题意在线求a[l,r]间最大连续子串xor和。题解我的程序竟然排Rank 6,不科学。。。 a[l,r]的xor和转化为b[l-1]^b[r] 那么问题转化为求b[l-1,r]的任意2个数的xor和的最大值。 如果一个数固定,那么就可以把问题转化为BZOJ 3261。 所以我们每n−−√\sqrt n取一个数,预处理出它到后面每个数的xor的最大值,比如对于a[n−−√]a[\sqrt n]原创 2016-01-02 14:00:46 · 680 阅读 · 0 评论 -
BZOJ 3207 花神的嘲讽计划Ⅰ 可持久化线段树
给出一个序列,对于每个询问,求询问序列是否在原序列某区间内出现过。由于询问序列长度均为K,所以原序列可以hash成n-k+1个数,那么问题就转化为给出一个数,问在序列某区间内是否出现过。这种问题需要可持久化线段树。离散化写的我心碎。。#include #include #include #define FOR(i,j,k) for(i=j;i<=k;i++)#defin原创 2016-01-02 19:54:29 · 465 阅读 · 0 评论 -
BZOJ 3894 文理分科 最小割
以前写的代码,准备重新写一遍。。#include <cstdio>#include <cstring>#include <queue>#define FOR(i,1,n) for(i=1;i<=n;i++)#define M 30300#define S 0#define T 30299#define INF 0x3f3f3f3f#define P(i,j) ((i)*n-n+(j)原创 2016-01-19 14:18:11 · 456 阅读 · 0 评论 -
BZOJ 2165 大楼 类矩阵乘法/倍增Floyd 二进制判断状态
给出n条有向边,要求从点1走到标号≥m的点的最短距离。一看和倍增Floyd很像。令dp[p][i][j]表示坐了p次电梯从i到j的最大上升高度。那么dp[0]就是题目给定的w。有dp[p][i][j]=max{dp[p/2][i][k]+dp[p/2][k][j]}发现dp[p]可以倍增得到。当dp[p][1][?]>=m时即可停止。倍增完后原创 2015-12-02 19:25:04 · 1131 阅读 · 0 评论 -
BZOJ 2141 排队 分块
分块大法好,大力出奇迹!先离散个化。lower_bound最近很少用了。。既然静态可以用树状数组,那么我们分块,对每个块开个树状数组,保存块内的元素。对于每个查询(x,y),可以确定内部包含的块,然后直接查询块的树状数组即可,x往右和y往左的一小段没有被包在块中的由于总数不超过O(sqrt(n)),所以暴力就好啦。对于每个询问,O(sqrt(n)logn)。#include原创 2016-01-05 13:52:49 · 602 阅读 · 0 评论 -
Link-Cut Tree(LCT) 模板总结 & 水题/模板题 动态树
1036: [ZJOI2008]树的统计CountTime Limit: 10 Sec Memory Limit: 162 MBSubmit: 9352 Solved: 3783[Submit][Status][Discuss]Description一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CH原创 2015-11-21 23:09:33 · 2818 阅读 · 0 评论 -
BZOJ 1648 USACO 2006 Dec Cow Picnic 奶牛野餐 搜索
24ms。。不过排在第1页就好233。爆搜一下各点并记录访问次数,被访问k次即属于答案。#include #include #define FOR(i,j,k) for(i=j;i<=k;i++)const int K = 101, N = 1001, M = 10001;int a[K], s[N], d[N], h[N], p[M], v[M];void dfs(int x)原创 2016-02-08 13:12:11 · 728 阅读 · 0 评论 -
BZOJ 1574 USACO 2009 Jan Damage 地震损坏
真是乱搜就A了。而且乱搜能上第一页#14惊了。#include using namespace std;const int N = 30001, M = 200001;int read() { int s = 0, f = 1; char ch = getchar(); for (; ch '9'; ch = getchar()) if (ch == '-') f =原创 2016-02-07 19:40:11 · 648 阅读 · 0 评论 -
BZOJ 1653 USACO 2006 Feb Backward Digit Sums 全排列
%%% http://www.cnblogs.com/zyfzyf/p/3983584.html神奇的杨辉三角#include #include #define rep(i,j,k) for(i=j;i<k;i++)int main() { int n, m, i, j, a[10], f[10]; scanf("%d%d", &n, &m); rep(i,0原创 2016-02-07 18:31:42 · 653 阅读 · 0 评论 -
BZOJ 1673 USACO 2005 Dec Scales 天平
%%%KBlackcn#include typedef long long ll;ll n, a[46], c, ans = 0, q[46];void dfs(ll p, ll s) { if (s + q[p] <= ans) return; if (ans < s) ans = s; for (ll i = p; i; i--) if (s + a[i] <原创 2016-02-07 15:42:19 · 650 阅读 · 0 评论 -
BZOJ 3891 USACO 2014 Dec Piggy Back 搜索 最短路
第一个人从1出发边权A,第二个人从2出发边权B,走到一起边权C,求最短方案使两人走到n。分别从1,2,n跑一次最短路,然后枚举走到一起的点计算答案即可。没开快速读入 104ms,开快速读入84ms,第二页和第一页的区别,然而很小。。#include #include #include const int N = 40001, M = 80001;using namespace原创 2016-01-31 17:01:19 · 396 阅读 · 0 评论 -
BZOJ 1603 [Usaco2008 Oct]打谷机 暴力搜索
一些齿轮之间有正着连接和反着连接,问最后一个齿轮的方向。dfs即可。写不写快速读入就是40ms和4ms的区别。。还真是资格赛。#include const int N = 1001, M = 2001;int read() { int s = 0, f = 1; char ch = getchar(); for (; ch '9'; ch = getchar(原创 2016-01-29 21:11:02 · 525 阅读 · 0 评论 -
BZOJ 1755 [USACO 2005 Qua] Bank Interest 快速幂
一开始没看清题,发现暴力就可以了。。写了个快速幂打了个酱油。。#include typedef long double ld;ld quickpow(ld a, int b) { ld ans = 1; for (; b; b /= 2, a = a * a) if (b & 1) ans *= a; return ans;}int main原创 2016-01-10 16:21:38 · 657 阅读 · 0 评论 -
BZOJ 1770 USACO 2009 Nov Lights 灯 高斯消元异或方程组
%%% http://wenku.baidu.com/link?url=Y55O7adUuZ1biB4m_9wdrJhts9KqqLwnMlI25xgxcpUok9Gv5CrRK9kV9Rxci2Eq8DDcfGi6I9gzVQURJv0kywjihAtkkE61mAss8ZO8qOW对于每盏灯,有方程组xor{X[adj[i]]} = 1。解异或方程组即可。可以尝试把ts >= an原创 2016-02-08 21:02:14 · 658 阅读 · 0 评论 -
BZOJ 1619 USACO 2008 Nov Guarding the Farm 保卫牧场
每次都从最高点开始流即可。话说这个dfs是不是floodfill?跪了,第一页咋这么快。#include #include using namespace std;const int N = 700;int read() { int s = 0, f = 1; char ch = getchar(); for (; ch '9'; ch = getchar()原创 2016-02-08 23:19:36 · 653 阅读 · 0 评论 -
BZOJ 1082 SCOI 2005 栅栏 搜索+剪枝
见到最大最小化的先考虑二分答案。。那好就二分可以满足的需求个数。 首先可以确定的优化 1. 删掉比最小的需求都小的木板,删掉比最大给定木板还大的需求。 2. 优先满足更大的需求,从最小的木板开始切。 3. 如果有相等的需求,且上一个相等需求i切了j,那么该需求就从j开始切,可以避免重复搜索量。 4. 如果没被浪费的小于需求的总量就不合法。 概括地说就是要考虑初始的不合法情况,搜索原创 2016-02-09 13:48:08 · 597 阅读 · 0 评论 -
BZOJ 3109 CQOI 2013 新数独
暴力大法好。读入挺麻烦?3s好慢QAQ强行爆搜即可,及时判断行列以及小方格的数字是否使用和大于小于就可以过了。代码比较丑。#include #include #define rep(i,j,k) for(int i=j;i<k;i++)using namespace std;const int block[9][9] = { {1,1,1,2,2,2,3,3,3原创 2016-02-07 14:49:06 · 897 阅读 · 1 评论 -
BZOJ 1085 SCOI 2005 骑士精神
之前听说过IDA*,好像很优越啊。#1的48ms咋实现的。。估价函数为不在目标位置的棋子个数。如果限定的最大搜索深度超过了已经走过的步数+最小可能的步数(即估价函数值),那么就不需要继续走了。枚举一遍最大搜索深度即可。还得好好斟酌一下要枚举的搜索深度。。#include #include using namespace std;#define rep(i,j,原创 2016-02-07 10:40:42 · 538 阅读 · 0 评论 -
BZOJ 2762 JLOI 2011 不等式组 树状数组
#论我都能想出来的题目# 给出一些不等式,问对于x=k有多少不等式满足要求。 显然一次不等式可以看做一个半数轴或全数轴或空,分别是x>a,x<a,x∈R,x∈∅x>a,x<a,x\in R,x\in \emptyset。 因此这是个区间修改单点查询,使用树状数组即可。 还是尽量排在第一页吧。。#include <cstdio>#include <algorithm>#include <c原创 2016-02-04 22:11:21 · 731 阅读 · 0 评论 -
BZOJ 4002 JLOI 2015 有意义的字符串 数列
给定正整数b,d,nb,d,n,求 ⌊(b+d‾√2)n⌋mod7528443412579576937\left\lfloor\left(\frac{b+\sqrt{d}}{2}\right)^n\right\rfloor \mod 7528443412579576937 其中0<b2≤d<(b+1)2≤1018,n≤1018,bmod2=1,dmod4=10<b^2\leq d<(b+1)^2原创 2016-02-04 16:08:09 · 550 阅读 · 0 评论 -
BZOJ 2783 JLOI 2012 树 搜索
#include const int N = 100001, M = 200000;int p[M], h[N], v[M], cnt = 0;void add(int x, int y) { p[++cnt] = h[x]; v[cnt] = y; h[x] = cnt;}void dfs(int x, int fa) { q[r++] = a[x]; sum += a[x];原创 2016-01-30 15:02:59 · 514 阅读 · 0 评论 -
BZOJ 3996 TJOI 2015 线性代数 最小割
一开始没看出来是最小割。。 听说是经典的最小割模型,是我太弱了。 max⎧⎩⎨⎪⎪∑(i,j)aiajbi,j−∑aici⎫⎭⎬⎪⎪\max \left\{ \sum_{(i,j)} a_ia_jb_{i,j}-\sum a_ic_i \right\} max{∑max{0,xi,j}⋅bi,j−∑max{0,xi,j−ai}⋅∞−∑max{0,xi,j−aj}⋅∞−∑max{0,ai}⋅ci原创 2016-01-18 20:46:27 · 750 阅读 · 0 评论 -
BZOJ 3144 HNOI 2013 切糕
题解首先我们不考虑其它,如果这个切糕只有1∗1∗r1*1*r,我们的线性规划式可以表示成: min{∑max{0,xi−xi−1}⋅vi+∑max{0,1−xn}⋅∞} \min \left\{ \sum \max\{0,x_i-x_{i-1}\}\cdot v_i+ \sum \max\{0,1-x_n\}\cdot \infty \right\} 令 x0=0x_0=0,即源点。 这样子可原创 2016-01-17 22:55:04 · 715 阅读 · 0 评论 -
BZOJ 1797 AHOI 2009 Mincut 最小割
我太弱了,每次排名都超后。奇怪了,好像以前看过这题但bzoj上没有记录。在残余网络上求强联通。问题1:如果一条边满流,那么这条边可能是最小割的边集。问题2:如果一条边两端点分别在S与T集,那么这条边就是割边,必须选取。#include #include #include using namespace std;const int N = 4005, M =原创 2016-01-17 16:55:53 · 473 阅读 · 0 评论 -
BZOJ 3110 ZJOI 2013 K大值查询 线段树套线段树
题目:有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。先维护权值再维护区间?反正数字最大就5W?对权值建立[1,n]的权值线段树,而且是单点修改单点查询。每个节点维护拥有该权值的区间线段树。[a,b]加数字c的话原创 2016-01-11 22:58:51 · 393 阅读 · 0 评论 -
BZOJ 3190 JLOI 2013 赛车 半平面交
每辆赛车有起始位置和速度,问哪些赛车在比赛过程中领先。简直立了flag。。精度问题卡死我了。。由s-t图像可得使用半平面交。注意会有2两车的参数完全相同。要去重的时候把id也记录下来。而且可以两辆车同时领先。有些的斜率太相近。。结果atan2结果一样算法跪了。我的算法应该是必开long double的。下次用反三角一定要开long double。。。。。。调了好久才原创 2016-01-10 13:53:28 · 608 阅读 · 0 评论 -
BZOJ 1007 HNOI 2008 水平可见直线 半平面交
给出一些直线,问从正上方往下看能看到哪些直线。一道简单的计算几何题,不过我决定硬搞成半平面交233稍微改了下,因为是维护上凸壳,所以不用处理首尾半平面相交的问题了。y=ax+b的直线过定点(0,b),方向向量(1,a)。right函数改成忘记排序编号怒WA一发233.判断double没有判精度直接用==并没有WA,好神奇。之前也一直没有判精度。#include #in原创 2016-01-08 22:52:45 · 500 阅读 · 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 · 492 阅读 · 0 评论