题意:
n、m,n个灯,m次操作
两种操作 0: 这段区间全部状态取反,初始全部为0
1: 询问这段区间有几个灯是亮的。
裸线段树,弱爆了。
#include
#include
#include
#include
#define N 101000
#define inf 0x3f3f3f3f
using namespace std;
struct Se...
分类:
其他好文 时间:
2015-01-02 14:44:29
阅读次数:
227
题解:
首先曼哈顿距离有些不好维护,但是它可以转化:
一个点本来的坐标是(x,y),那么可以转化成(x+y,x-y)
这样就人为构造出一种性质:1、2两点曼哈顿距离=max(|x1-x2|,|y1-y2|);
这样我们就可以排序单调搞掉一维,然后另一维只需要求前驱后继到该点的距离
满足则加并查集。
这个过程可以用权值线段树,也可以用平衡树。但是权值线段树还需要离散化,反...
分类:
其他好文 时间:
2015-01-02 12:21:22
阅读次数:
204
题解:
首先考虑dfs,但是看到答案的“64bit”就放弃了吧、
所以肯定是组合数、状压DP什么的,尤其是那个16,标准的状压数。
好吧,就是状压DP。
f[i][j]表示i是状压的01串表示哪个取了哪个没取,然后j是结尾字符,
虽然水,但是时间复杂度是可以过的。
代码:
#include
#include
#include
#include
#include...
分类:
其他好文 时间:
2015-01-02 12:17:27
阅读次数:
148
题意:输入n、m、p然后是n头牛塔坐标、m个草垛坐标,有p次指令机会。
每次指令可以向上下左右其中一种方向,让所有牛塔都移动一单位。
然后每经过草垛/牛塔次,就有1个权值。
求权值最大值及使权值最大的移动指令序列(字典序最小)。
题解:f[i][j][k]表示第i次,移动序列x轴坐标为j,y轴k,最大权值。
然后倒着做以保证字典序。
代码:
#include ...
分类:
其他好文 时间:
2015-01-01 17:23:43
阅读次数:
197
题意:有若干个颜色,每个颜色有若干头牛。
现在将牛进行配对,使得每对颜色都不一样,有SPJ。
题解:一旦某种颜色的牛数量占当前未配对牛总数最多,那么就要群起而攻之!
利用pq或者heap解决。
代码:
#include
#include
#include
#include
#include
#define N 101000
#define inf 0x3f3f3...
分类:
其他好文 时间:
2014-12-31 10:04:33
阅读次数:
166
题目大意:给定一张无向图,求从s出发恰好经过n条边到达e的最短路
倍增Floyd……为何大家都管这个叫做矩阵乘法- - 算了为何要纠结这种事- -
令f[p][i][j]表示走2^p步从i到达j的最短路 有f[p][i][j]=min{f[p-1][i][k]+f[p-1][k][j]}
将n进行二进制拆分 用矩阵g记录答案矩阵 对于每一位p 用f[p]和g两个矩阵搞出h 再将h的值赋给g
...
分类:
其他好文 时间:
2014-12-30 09:16:28
阅读次数:
212
题目大意:求恰好走k步从S到T的最短路。
思路:设f[p][i][j]为从i到j恰好走2^p步的最短路,DP方程十分简单:f[p][i][j] = min(f[p][i][j],f[p - 1][i][k] + f[p - 1][k][j]);
对总步数T进行二进制拆分,在T有1的位置上,假如这个位置为p,那么就用f[p][][]来更新答案g[][],最后得到的g[][]就是答案矩阵。...
分类:
其他好文 时间:
2014-12-30 09:16:17
阅读次数:
184