自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BraketBN

Think, Thank, Thunk.

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

原创 【BZOJ3675】[Apio2014]序列分割【斜率优化】

写了各种姿势,最后还是得照着网上题解才能AC= =参考了凯爷blog:http://blog.csdn.net/lethelody/article/details/44781927#include #include using namespace std;typedef long long LL;const int maxn = 100005, maxq =

2016-02-29 20:26:28 418

原创 【BZOJ3697】采药人的路径【点分治】

点分治咯。参考的hzwer博客...http://hzwer.com/4526.html#include #include using namespace std;typedef long long LL;const int maxn = 200005;int n, head[maxn], cnt;int dis[maxn], depth[maxn],

2016-02-29 20:18:19 499

原创 【POJ1655】Balancing Act【树的重心】

题意:求树的重心。做点分治前先做的一个题。#include #include using namespace std;const int maxn = 20005, inf = 0x3f3f3f3f;int n, head[maxn], cnt, size[maxn], id, ans;struct _edge { int v, next;} g[

2016-02-29 20:17:04 375

原创 【POJ1741】Tree【点分治】

题意:n个点的树,求距离不大于k的点对个数。点分治模板题。#include #include #include using namespace std;const int maxn = 10005, inf = 0x3f3f3f3f;int n, k, head[maxn], cnt, dis[maxn], root, ans, tot, size[ma

2016-02-29 20:11:24 297

原创 【BZOJ3260】跳【组合数】

设m 所以求出组合数就好了...发现n * m最大为10^12,那么m最大为10^6。将组合数用阶乘形式展开,为 (n + m + 1)! / n! / (m + 1)!。将前两项约掉,得到(n + 1) * (n + 2) * ... * (n + m + 1) / (m + 1)!分子有m项,分母有m项,所以可以O(m)求出来。因为有inv(

2016-02-28 20:14:48 762

原创 【BZOJ3511】土地划分【最小割】

看了题解才会建图...对于点x,从S向x连容量为va的边,从x向T连容量为vb的边。对于边(u, v),从S向u和v分别连两条容量为ea / 2的边,从u和v向T分别连两条容量为eb / 2的边,然后u和v中间互相连两条容量为ea / 2 + eb / 2 + ec的边。答案是 最大贡献 减去 最小割。#include #include using n

2016-02-28 20:03:32 917

原创 【BZOJ3261】最大异或和【可持久化Trie树】

Trie维护序列前缀异或和,然后贪心找就可以啦。#include const int maxn = 600005, maxd = 26, maxnode = maxn * maxd;int n, m, bin[maxd], num[maxn], son[maxnode][2], sum[maxnode], root[maxn], triecnt;inline int ire

2016-02-27 18:54:00 380

原创 【UVa10054】The Necklace【欧拉回路】

题意:有n个珠子,每个珠子两端分别有两个颜色,问是否可以把这些珠子串成一个项链,使得相邻珠子的相邻两端的颜色相同。如果可以,输出任意一个方案。不要对珠子建图,把颜色当成点,然后一个珠子上的两个颜色连无向边,跑欧拉回路就行啦。#include #include using namespace std;const int maxn = 55;int n, m,

2016-02-27 08:58:21 613

原创 【BZOJ3656】异或【扩展Lucas】【线性无关】

因为新数列中的数线性无关,所以答案就是C(n, k) % p,因为p比较小,写个扩展Lucas就好了。证明一下线性无关:首先有两个引理:定理1:一个n×n的矩阵A是非奇异的充要条件为 A的行列式不等于0。定理2:令x1, x2, ..., xn为R^n中的n个向量,并令X = (x1, ...,xn)。向量x1, x2, ..., xn线性无关的充要条件是X

2016-02-26 19:46:53 1343

原创 【BZOJ1059】[ZJOI2007]矩阵游戏【二分图匹配】

题意:给出一个01矩阵,可以交换任意行,交换任意列。问是否可以把这个矩阵的对角线都变为1。http://www.cnblogs.com/jianglangcaijin/p/3799615.html说的挺详细的。#include using namespace std;const int maxn = 405, maxm = 40005;int n, head

2016-02-26 17:12:08 397

原创 【BZOJ2140】稳定婚姻【SCC】【二分图完备匹配】

题意:给出一个二分图完备匹配,找另一个完备匹配。竟然是SCC,和稳定婚姻并没有什么卵关系。对于原始的匹配点u, v,连接(v, u)对于可行的匹配点u, v,连接(u, v)跑一次tarjan。对于一组夫妻,如果两个人在同一个SCC里,那么是Unsafe,否则Safe。好久没敲tarjan了。#include #incl

2016-02-26 15:52:59 873

原创 【HDU3394】Railway【BCC】【桥】

题意:n个点的无向图,求桥边个数,求属于多个环的边的个数。BCC裸题?跑一次tarjan都可以求出来啦。#include #include #include #include using namespace std;const int maxn = 10005, maxm = 100005;int n, m, head[maxn], cnt, lo

2016-02-26 14:59:15 532

原创 【ZOJ-2588】Burning Bridges【桥】

题意:给出一个无向图,求桥的个数和编号。注意有重边。tarjan一遍即可,参考大白书写的代码。重边的处理:每条边记录一个flag,表示当前边是否是重边(是不是单身)。注意没有桥的情况,还有输出格式。#include #include using namespace std;const int maxn = 10005, maxm

2016-02-26 11:38:12 389

原创 【SPOJ-PT07Z】Longest path in a tree【DFS/BFS】【树的直径】

题意:求树的直径。先从任意一点DFS,找到深度最大的点,这个点一定是树的直径的一个端点(可以反证法证明),然后从该点DFS找到另一个端点。#include #include using namespace std;const int maxn = 10005;int n, head[maxn], cnt, depth[maxn];struct _edg

2016-02-25 18:29:55 872

原创 【SPOJ- HORRIBLE】Horrible Queries【线段树】

题意:区间加法,区间求和。裸模板。似乎不会写了...注意加法里的v题里说#include typedef unsigned long long ULL;const int maxn = 100005;int n;ULL addv[maxn << 2], tr[maxn << 2];inline int iread() { int f

2016-02-25 18:20:00 792

原创 【SPOJ-ACODE】Alphacode【计数DP】

题意:一些没有空格间隔的数,若1对应A,2对应B,...,26对应Z,问有多少种对应的字符串。很简单的DP。注意0的处理。#include #include #include using namespace std;typedef unsigned long long ULL;const int maxn = 5005;int n;UL

2016-02-25 17:31:52 532

原创 【SPOJ-GSS1】Can you answer these queries I【线段树】【最大子段和】

题意:给出一些数,一些询问,每次询问一段区间内最大的子段和是多少。无修改的小白逛公园...#include #include using namespace std;const int maxn = 50005, inf = 0x3f3f3f3f;int n, m, tr[maxn << 2], trl[maxn << 2], trr[maxn << 2], su

2016-02-25 17:08:20 473

原创 【SPOJ-PALIN】The Next Palindrome【模拟】

题意:给出一个数,输出比这个数大的最小的回文数。参照了http://blog.csdn.net/sunacmer/article/details/7399693#include #include const int maxn = 1000005;int n, num[maxn];char str[maxn];inline bool cmp() { fo

2016-02-25 16:46:48 460

原创 【SPOJ-INVCNT】Inversion Count【树状数组】【逆序对】

题意:给出一列数,求逆序对个数。裸题。发现树状数组的n与数的个数n搞混了...懒得离散化,反正时限大。#include #include using namespace std;typedef unsigned long long ULL;const int maxn = 200005, maxm = 10000005;int n, a

2016-02-25 15:22:58 844

原创 【SPOJ-AGGRCOW】【BZOJ1734】【POJ2456】Aggressive cows【二分】【贪心】

题意:n个房间,c头牛,将这c头牛分配进房间,使得牛之间的最小距离最大。经典二分。二分答案,枚举房间。如果房间距离大于答案,那么计数器加一。如果最后计数器不小于c,说明答案应该更大,否则更小。#include #include using namespace std;const int maxn = 100005;int n, m, pos[m

2016-02-25 14:42:40 622

原创 【SPOJ-COINS】Bytelandian gold coins【DP】

题意:价值为n的硬币,可以换为价值为n / 2, n / 3, n / 4的三枚硬币。给出n,问最大硬币总和。(n 设dp[i]表示价值为i的硬币可以获得的最大价值。显然有dp[i] = max(i, dp[i / 2] + dp[i / 3] + dp[i / 4])但是数组太大,于是先算出一段数值内的dp,大于这个数值的用搜索就好了。#inclu

2016-02-25 14:11:27 536

原创 【SPOJ-KOPC12H】K12-OE Numbers【数位DP】

题意:定义OE数为:对于所有数位,使得偶数和大于奇数和的数。比如1233,奇数和 = 1 + 3 + 3 = 7,偶数和 = 2,奇数和 > 偶数和,不是OE数。设f[i][k]表示长度为i的数,偶数和减奇数和等于k的OE数的个数。对于当前位j,如果j为奇数,那么f[i][k] += f[i - 1][k + j]如果j为偶数,那么f[i][k] += f[i -

2016-02-25 10:48:34 801

原创 【BZOJ1026】[SCOI2009]windy数【数位DP】

学习一发数位DP。f[i][j]表示长度为i,最高位为j的windy数。转移很简单,j为第i位,k为第i - 1位,如果j和k之差不小于2,那么有f[i][j] += f[i - 1][k]calc(int x)是计算[1, x - 1]内有多少windy数。分三种算。(1)长度比数x小。(2)长度等于数x但是最高位比数x最高位小。(3)其他的。

2016-02-25 08:18:33 359

原创 【SPOJ-SARRAY】Suffix Array【后缀数组】

题意:求一个字符串的SA数组。回顾一下模板。出题人说O(n)的才可以得100分,然而倍增也过了。#include #include #include using namespace std;const int maxn = 100005, M = 70;int num[maxn], sa[maxn];int wa[maxn], wb[maxn],

2016-02-24 22:52:50 428

原创 【SPOJ-ABCPATH】ABC Path【BFS/DFS】

题意:n×m的格子,每个格子有一个大写英文字母,每个格子可以沿着八个方向走。问图中最长的从A开始的字母序列(ABCD...)的长度是多少。搜索...注意写vis标记,否则容易炸。#include #include using namespace std;const int maxn = 55, maxq = 10000;int n, m, g[maxn

2016-02-24 22:24:20 1085

原创 【SPOJ-DYNACON1】Dynamic Tree Connectivity【LCT/并查集】

题意:和BZOJ2049一样。换了各种LCT姿势,一直TLE。后来发现可以用并查集...参考了Seter聚聚的blog:http://seter.is-programmer.com/posts/29428.html#include #include using namespace std;const int maxn = 100005;int n,

2016-02-24 19:49:20 848

原创 【BZOJ2049】[Sdoi2008]Cave 洞穴勘测【Link-Cut Tree】

就不发题意了...LCT模板题,和http://www.spoj.com/problems/DYNACON1/一样,但是不卡常数...数组:#include #include using namespace std; const int maxn = 100005; int n, m, son[maxn][2], pre[maxn];bool rev[

2016-02-24 19:07:37 453

原创 【SPOJ-MGAME1】Game【博弈DP】

题意:一个n×m的地图,地图上有些地方不能走,有些地方有分值(1/3/5)。两个玩家移动一个棋子,棋子只能向下、右、右下移动。棋子到达一个格子,这个格子的分值属于移动方。当棋子无法移动时,分数高的获胜,如果分数一样,无法移动者输。有多组询问,每个询问给出一个起点,问先手赢还是后手赢。这题我能玩一年。设dp[i][j][0]代表先手从(i, j)出发所能获取的最大分值,设dp

2016-02-24 11:32:18 355

原创 【SPOJ-GCDEX】GCD Extreme【欧拉函数】【线性筛】

题意:求∑(1 白书上原题...注意卡常就可以过。#include typedef unsigned long long ULL;typedef unsigned int uint;const int maxn = 1000001;int cnt;int prime[maxn], phi[maxn];ULL f[maxn];bool isnotpri

2016-02-24 08:52:44 520

原创 【SPOJ-SCPC11H】Dolls【最小路径覆盖】

题意:有一些箱子,已知长宽高(不能旋转),一个较大的箱子中最多可以放入一个较小的箱子(小箱子里有可能也有箱子),问最外层最少有多少箱子。相当于有一些点(x, y, z),若两个点i和j满足xi 由最小路径覆盖 = n - 二分图最大匹配,写个hungary即可。#include const int maxn = 505, maxm = maxn * maxn

2016-02-23 22:10:37 559

原创 【SPOJ-MAIN75】BST again【计数DP】【记忆化搜索】

题意:节点个数为n,编号分别为1到n,高度为h,求排序二叉树的个数。一开始写了个预处理DP,结果TLETLETLETLETLE...然后发现可以写记忆化搜索...当前二叉树的方案数等于左子树的方案数×右子树的方案数...然后就可以记忆化搜索了。#include typedef unsigned int uint;typedef unsigned l

2016-02-23 21:22:48 555

原创 【SPOJ-LCM】The Time of Day【计数DP】【离散化】

题意:从1到n这n个数中选出一些数,使得它们的lcm不小于M。(n 暴力枚举O(2^n)肯定不行,所以用质因数分解优化一下。先预处理出lcm(1, 2, ..., 40)的质因数分解情况,发现2有6种取值,3有4种,5有3种,7有2种,11有2种,...,37有2种。所以lcm一共有36864种取值(但是取值非常大,所以先离散化),于是按离散化后的lcm的取值进行计数dp。

2016-02-23 18:03:07 574

原创 【SPOJ-ALIEN2】Aliens at the train, again!【DP】

题意:有两个火车站A和B,每个有n个站台,每个站台有一些人。外星人从1号站台开始出发(他可以选择从A或者B开始),每次他可以继续沿着当前火车站走,或者切换到另一个火车站。如果在第i号站台切换,那么遇到的人数就是Ai+Bi。但是外星人遇到的人数总和不能超过k。问你外星人最多能走到几号站台,最少能遇到多少人。(如果下一步遇到人数总和大于k,那么外星人会在当前站台下车。)比较简单的dp。

2016-02-22 16:33:17 592

原创 【SPOJ-BALLSAG】Ball Stacking Again【DP】

题意:数字三角形,取走一个数字,会把这个数字左上方和右上方的数字取走(这两个数被取走后还会取走他们俩上面的数字,类似连锁反应),每个数字的贡献只算一次。问最大贡献。从上到下DP,但是要去重。转移一开始写的n - 1转n,不好写,最后改成n转n + 1了,也不用特判边界了。#include #include using namespace std;c

2016-02-22 15:34:27 431

原创 【SPOJ-MYQ5】The Nerd Factor【计数DP】

题意:n个人分组,每组不少于k个人,求方案数。先O(n^2)预处理,然后O(1)回答就好。#include const int maxn = 1001, p = 1000000007;int dp[maxn][maxn];inline int iread() { int f = 1, x = 0; char ch = getchar(); for(; c

2016-02-22 14:38:53 781 3

原创 【BZOJ1257】[CQOI2007]余数之和sum【余数求和】【分块】

详见http://blog.csdn.net/braketbn/article/details/50715971#include typedef unsigned long long ULL;ULL n, k;int main() { scanf("%llu%llu", &n, &k); ULL ans = 0; for(ULL i = 1, l, r; i

2016-02-22 13:25:23 1214

原创 【SPOJ-NAGAY】Joseph’s Problem【余数求和】【分块】

题意:给出n,k。求n和k都是10^18,sqrt(k)理论上过不了,但是还是过了...题挺好。这题的分块和一般的分块不太一样,直接看图吧。设k = d * x + r。发现每个块内都是一个等差数列,公差就是d。于是我们枚举d,按d分块。对于一个块[L, R](指的是i的区间),显然R = k / d,L用上一块的末尾加1,就是L

2016-02-22 12:28:51 1325 1

原创 【SPOJ-TRIGALGE】Easy Calculation【二分法】【牛顿迭代法】

题意:求Ax+Bsinx=C的解。一开始,我高高兴兴的写了二分法:虽然比较长,但是一发AC了。#include #include const double eps = 1e-9;double A, B, C;bool check(double x) { if(A * x + B * sin(x) - C < eps) return 1; retur

2016-02-21 21:48:47 608

原创 【SPOJ-DESRUG】Desrugenstein【Floyd】

题意:给出一个NxN的网格,给出每个网格可以走的方向,有一些询问,问从一点到另一点的最短路长度。多源最短路裸题,但是读入太恶心了,而且表述不清楚...附自己的画的样例的图:(比较丑)#include #include using namespace std;const int maxn = 105, inf = 0x3f3f3f3f;

2016-02-21 20:49:36 785 4

原创 【SPOJ-YELBRICK】The Yellow Brick Road【GCD】

题意:给出n个长方体,要割出相同大小的正方体,并使得正方体的个数尽可能小。所有的长方体必须用上,且不能丢弃材料。个数尽可能少就是让边长尽可能大。因为要整除所有的边,那么显然对所有的长方体的长宽高取gcd就好了。算的时候注意开LL。#include typedef long long LL;const int maxn = 1005;int n

2016-02-21 19:27:32 654

空空如也

空空如也

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

TA关注的人

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