- 博客(472)
- 资源 (2)
- 收藏
- 关注
原创 POJ 1284 Primitive Roots 原根
题目来源:POJ 1284 Primitive Roots#include const int maxn = 70000;int phi[maxn];void phi_table(int n){ for(int i = 2; i <= n; i++) phi[i] = 0; phi[1] = 1; for(int i = 2; i <= n; i++) if(!phi[i
2014-08-17 12:29:34 863
转载 拓扑排序题集
HDU】1285确定比赛名次2094产生冠军2647Reward3342Legal or Not1811Rank of Tetris 拓扑+并查集3231 Box Relations 三维拓扑=================================================================【POJ】1094 Sortin
2014-08-16 21:34:16 790
原创 URAL 1684. Jack's Last Word KMP
题目来源:URAL 1684. Jack's Last Word题意:输入a b 把b分成若干段 每一段都是a的前缀思路:b为主串 然后用a匹配b 记录到b的i位置最大匹配的长度 然后分割 分割的时候要从后往前如果a = abac b = abab 那么如果从前往后 首先覆盖了aba 然后b就不能覆盖了 从后往前就可以了 首先覆盖ab 下一次还是ab因为已经记录了到i位置的最大匹配
2014-08-12 19:08:01 1024
转载 ACM中国国家集训队论文集目录(1999-2009)
国家集训队1999论文集陈宏:《数据结构的选择与算法效率——从IOI98试题PICTURE谈起》来煜坤:《把握本质,灵活运用——动态规划的深入探讨》齐鑫:《搜索方法中的剪枝优化》邵铮:《数学模型的建立、比较和应用》石润婷:《隐蔽化、多维化、开放化——论当今信息学竞赛中数学建模的灵活性》杨帆:《准确性、全面性、美观性——测试数据设计中的三要素》周咏基:《论随机化算法的
2014-08-11 19:25:13 1062
原创 HDU 1527 取石子游戏 威佐夫博弈
题目来源:HDU 1527 取石子游戏题意:中文思路:威佐夫博弈 必败态为 (a,b ) ai + i = bi ai = i*(1+sqrt(5.0)+1)/2 这题就求出i然后带人i和i+1判断是否成立以下转自网上某总结有公式ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,…,n 方括号表示取整函数) 其中出现了黄金分割数(1+√5)/2
2014-08-10 19:07:41 986
转载 区间DP题集(个别未完成)
1、Zoj 3537 Cake 2、Light oj 1422 Halloween Costumes 很基础的区间DP,是不老传说那题的减弱版。 状态转移方程:dp[i][j] = dp[i][j-1] (arr[i] == arr[j]) dp[i][j] = min(dp[i][
2014-08-08 09:15:31 886
原创 Light OJ 1356 Prime Independence 最大独立集+素数筛选
题目来源:Light OJ 1356 Prime Independence题意:给你n个数 选出最多的数构成一个集合使得任何2个数不是另外一个数的质数倍 x!=k*y 思路:矛盾的2个数连边 并且所有数分成质因子数为奇数和偶数两部分 以质因子奇偶不同构建二分图 同奇 同偶的数一定不是另外一个数的质数倍判断矛盾 首先对每个数因子分解 例如x 有a1个p1质因子 a2个p2质因子...an
2014-08-06 16:52:43 1646
原创 POJ 3904 Sky Code 容斥原理
题目来源:POJ 3904 Sky Code题意:选出最大公约数为1的四元组的方案思路:容斥原理 总的方案C(n,4)减去t(1)+t(2)-t(3)+...+(-)^kt(k)t(i)表示四元组公因子的个数为i的方案数#include #include #include using namespace std;const int maxn = 10010;typedef
2014-08-03 16:10:40 1130
原创 POJ 2356 Find a multiple 鸽巢原理
题目来源:POJ 2356 Find a multiple题意:n个数 选出任意个数 使得这些数的和是n的倍数思路:肯定有解 并且解是连续的一段数 证明:假设有m个数 a1,a2,a3...am s1 s2 s3...sm为前缀和 s1 = a1 s2 = a1+a2 s3 = a1+a2+a3... sm = a1+a2+a3+...+am1.如果某个前缀和si%m =
2014-08-02 18:33:30 949
原创 编程之美 2.1 求二进制数中1的个数
假设有数n以前用除二取余法 复杂度logn 不多说有一个logv的方法 v为1的个数 复杂度比logn小 int Count(int x){ int ans = 0; while(x) { x &= (x-1); ans++; } return ans;}这里用到了位运算 x&(x-1)每次去掉一个1 举个例子 100010001000&(10
2014-07-31 18:31:54 983
原创 POJ 3228 Gold Transportation 并查集
题目来源:POJ 3228 Gold Transportation题意:有一些金矿要运走存储 求运送的最小最长边思路:并查集 按边长从小到大排序 如果满足每个连通分量金矿的和小于等于存储的容量 那么就break输出#include #include #include using namespace std;const int maxn = 210;int f[maxn], r
2014-07-27 09:59:32 1034
原创 POJ 1984 Navigation Nightmare 二维带权并查集
题目来源:POJ 1984 Navigation Nightmare题意:给你一颗树 k次询问 求2点之间的曼哈顿距离 并且要在只有开始k条边的情况下思路:按照方向 我是以左上角为根 左上角为原点 dx[i]为i点距离根的x坐标 dy[]是y坐标 这两个可以通过路径压缩求出 只不过是二维而已#include #include #include using namespace st
2014-07-26 16:08:38 1220
原创 HDU 3613 Best Reward 正反两次扩展KMP
题目来源:HDU 3613 Best Reward题意:每个字母对应一个权值 将给你的字符串分成两部分 如果一部分是回文 这部分的值就是每个字母的权值之和 求一种分法使得2部分的和最大思路:考虑扩展KMP 输出a串 得到a的反串b 求出f[0]和f[1] 和 extend[0]和extend[1] 正反求2次枚举位置i 分成2部分0到i-1 和i到n-1 因为分成的2部分必须组成原字符
2014-07-24 14:00:04 966
原创 HDU 4333 Revolving Digits 扩展KMP
题目来源:HDU 4333 Revolving Digits题意:求一个数字循环移动后有多少个不同的小于 等于 大于的数字思路:扩展KMP求出S[i..j]等于S[0..j-i]的最长前缀 判断 next[i] 大于等于n就是相同 小于n判断S[next[i]]和S[next[i]+i]的大小next数组的含义就是S字符串以i开始的和S本身(以0开始)的最长公共前缀 把题目输入的复制一
2014-07-24 10:13:57 839
原创 HDU 4513 吉哥系列故事——完美队形II manacher求最长回文
题目来源:吉哥系列故事——完美队形II题意:中文思路:在manacher算法向两边扩展的时候加判断 保证非严格递减就行了#include #include #include using namespace std;const int maxn = 100110;int a[maxn<<1];int b[maxn<<1];int dp[maxn<<1];int manac
2014-07-23 13:04:04 983
原创 POJ 1451 T9 字典树+优先队列
题目来源:POJ 1451 T9题意:给你一些单词 和优先值 然后当你按下数字的时候首先会出现哪个单词 就是我们平时手机的按键思路:建一颗字典树 因为按一个数字对应多个字母 那么就有多种情况 我们要输出权值最大的一个 我用了优先队列 这里每个前缀的优先值是所有单词优先值的和例如abc 5 abd 6 acd 7 那么a这个前缀的优先值是18 ab的优先值是11#include #
2014-07-22 16:58:47 1112
原创 POJ 2185 Milking Grid KMP循环节周期
题目来源:POJ 2185 Milking Grid题意:至少要多少大的子矩阵 可以覆盖全图 例如样例 可以用一个AB 组成一个ABABABABABAB 可以多出来 思路:每一行求出周期 总共n个 求这n个周期的最小公倍数 如果大于m 取m 每一列求出周期 总共m个求这个m个周期的最小公倍数 如果大于n取n答案就是2个最小公倍数的积#inc
2014-07-21 17:04:25 1060
原创 HDU 3047 Zjnu Stadium 带权并查集
题目来源:HDU 3047 Zjnu Stadium题意:给你一些人 然后每次输入a b c 表示b在距离a的右边c处 求有多少个矛盾的情况 思路:用sum[a] 代表a点距离根的距离 每次合并时如果根一样 判断sum数组是否符合情况 根不一样 合并两棵树 这里就是带权并查集的精髓sum[y] = sum[a]-sum[b]+x 这里y的没有合并前b的根 #include #in
2014-07-18 13:44:24 1079
原创 HDU 2473 Junk-Mail Filter 删点并查集
题目来源:HDU 2473 Junk-Mail Filter题意:2中操作 M x, y 将x,y 合并到一个集合 S x 将x从所在的集合去掉 自己成为一个集合 最后求有多少个集合思路:删点不好做 可以如果0 1 2在一个集合 可以定义个数组映射 就是每个点所对应实际的点 开始是a[0] = 0 a[1] = 1 a[2] = 2 说明都是自己现在要去掉2 可以定义一个新的点 原来的
2014-07-17 21:06:10 1033
原创 POJ 2763 Housewife Wind LCA转RMQ+时间戳+线段树成段更新
题目来源:POJ 2763 Housewife Wind题意:给你一棵树 2种操作0 x 求当前点到x的最短路 然后当前的位置为x; 1 i x 将第i条边的权值置为x思路:树上两点u, v距离为d[u]+d[v]-2*d[LCA(u,v)] 现在d数组是变化的 对应每一条边的变化 他修改的是一个区间 用时间戳处理每个点管辖的区域 然后用线段树修改 线段树的叶子节点村的是根到每一个点的距离
2014-07-15 23:03:39 1264
原创 Light OJ 1411 Rip Van Winkle`s Code 线段树成段更新
题目来源:Light OJ 1411 Rip Van Winkle`s Code题意:3中操作 1种查询 求区间和 其中每次可以把一段区间从左到右加上1,2,3,。。。或者从右到左加上。。。3,2,1 或者把某个区间的数都置为v思路:我是加了6个域 add是这段区间每个数都要加上add add是这么来的 对与123456。。。这个等差数列 可能要分为2个区间 那么我就分成123和12
2014-07-13 17:18:39 1178
原创 Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
题目来源:Light OJ 1406 Assassin`s Creed题意:有向图 派出最少的人经过所有的城市 并且每个人不能走别人走过的地方思路:最少的的人可以走完全图 明显是最小路径覆盖问题 这里可能有环 所以要缩点 但是看样例又发现 一个强连通分量可能要拆分 n最大才15 所以就状态压缩 将全图分成一个个子状态 每个子状态缩点 求最小路径覆盖 这样就解决了一个强连通分量拆分的问题
2014-07-12 11:36:25 1525
原创 POJ 1986 Distance Queries LCA树上两点的距离
题目来源:POJ 1986 Distance Queries题意:给你一颗树 q次询问 每次询问你两点之间的距离思路:对于2点 u v dis(u,v) = dis(root,u) + dis(root,v) - 2*dis(roor,LCA(u,v)) 求最近公共祖先和dis数组#include #include #include using namespace std;co
2014-07-10 09:41:13 1413
原创 最近公共祖先模版
LCA tarjan 的离线算法#include #include #include using namespace std;const int maxn = 40010;int first[maxn], head[maxn], cnt, sum;struct edge{ int u, v, w, next;}e[maxn*2], qe[maxn], Q[maxn];int
2014-07-08 15:21:31 962
原创 Light OJ 1316 A Wedding Party 最短路+状态压缩DP
题目来源:Light OJ 1316 1316 - A Wedding Party题意:和HDU 4284 差不多 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路思路:首先预处理每两点之前的最短路 然后只考虑那些商店 个数小于15嘛 就是TSP问题 状态压缩DP搞一下 状态压缩姿势不对 有必要加强#include #include #include #include
2014-07-06 17:32:01 1033
原创 Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖
题目来源:Light OJ 1429 Assassin`s Creed (II)题意:最少几个人走完全图 可以重复走 有向图思路:如果是DAG图并且每个点不能重复走 那么就是裸的最小路径覆盖 现在不是DAG 可能有环 并且每个点可能重复走 对于有环 可以缩点 缩点之后的图是DAG图 另外点可以重复走和POJ 2594一样 先预处理连通性#include #include #incl
2014-07-05 12:17:50 1998
原创 Light OJ 1304 The Best Contest Site Ever 行列匹配变形
题目来源:Light OJ 1304 The Best Contest Site Ever题意:。的位置可以放人 W是障碍物 R除了不能放人之外和。一样 求最多放几个人 思路:行列匹配变形 要重新编行号和列号每一行 因为被W隔断了..RR..W.RW.RRR. 对应行号是1 1 0 0 23 0 4 0 05 0 0 0 5模拟一下预处理
2014-07-04 19:12:13 1145
原创 HDU 1281 棋盘游戏 行列匹配
题目来源:HDU 1281 棋盘游戏题意:有一些点可以放车 放的时候不能相互攻击到 求出哪一些点必须放 不放就不能得到最大的匹配思路:行列匹配 矩阵的每一个点对于二分图的每一条边 首先求出最大匹配ans 然后如果每次去掉一个点然后再重新求最大匹配 很耗时 可以把第一次二分匹配的图存着然后那些关键点肯定是是匹配的边 枚举去掉那一个格点(就是去掉一条已经匹配边)如果还能匹配 那么该格点就不
2014-07-01 18:56:16 884
原创 HDU 3360 National Treasures 奇偶匹配最小点覆盖
题目来源:HDU 3360 National Treasures题意:如果a[i][j] != -1 把他转成二进制 最多有12位 代表题目那张图的12个位置 如果对应位是1 说明在那里放一个守卫可以看住a[i][j]位置上的这个东西思路:明显死最小点覆盖 奇偶匹配建图 #include #include #include using namespace std;const i
2014-06-29 01:09:38 1343
原创 HDU 3118 Arbiter 判定奇圈
题目来源:HDU 3118 Arbiter题意:翻译过来就是不能有奇圈 每走一步状态会变化 当他回到起点时如果和原来的状态不一样 可能会死 求至少去掉多少条边可以避免这种状况发生思路:二分图是没有奇圈的 最多就15个点 我们用状态压缩枚举那些点是在二分图的一边和另外一边 确定二分图之后枚举输入的边 每条边连接的不能是同一集合的点不符合就去掉 最后取小#include #inclu
2014-06-25 17:45:16 1226
原创 UVa 10828 Back to Kernighan-Ritchie 高斯消元+概率DP
题目来源:UVa 10828 Back to Kernighan-Ritchie题意:从1开始 每次等概率从一个点到和他相邻的点 有向 走到不能走停止 求停止时每个点的期望思路:写出方程消元 方程有唯一解 多解 无解的情况 有环 一直再环里无法停止算无穷大 从1不能到的点期望为0#include #include #include #include #include usin
2014-06-21 14:30:32 1337
原创 Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值
题目来源:Light OJ 1272 Maximum Subset Sum题意:选出一些数 他们的抑或之后的值最大思路:每个数为一个方程 高斯消元 从最高位求出上三角 消元前k个a[i]异或和都能有消元后的异或和组成消元前k个a[i]a[i]异或和都能有消元后的异或和都能有消元后的p个a[i]a[i]的异或的异或保证每一列只有一个1 消元
2014-06-19 19:18:46 3061
原创 Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩
题目来源:Light OJ 1288 Subsets Forming Perfect Squares题意:给你n个数 选出一些数 他们的乘积是完全平方数 求有多少种方案思路:每个数分解因子 每隔数可以选也可以不选 0 1表示 然后设有m种素数因子 选出的数组成的各个因子的数量必须是偶数组成一个m行和n列的矩阵 每一行代表每一种因子的系数 解出自由元的数量#include #inc
2014-06-18 17:49:37 1771
原创 高斯消元模版
矩阵的秩typedef int Matrix[maxn][maxn];int rank(Matrix A, int m, int n){ int i = 0, j = 0, k, r, u; while(i < m && j < n) { r = i; for(k = i; k < m; k++) if(A[k][j]) { r = k; brea
2014-06-17 13:30:54 904
原创 HDU 2444 The Accomodation of Students 二分图判定+最大匹配
题目来源:HDU 2444 The Accomodation of Students题意:n个人是否可以分成2组 每组的人不能相互认识 就是二分图判定 可以分成2组 每组选一个2个人认识可以去一个双人间 最多可以有几组思路:二分图判定+最大匹配#include #include #include using namespace std;const int maxn =
2014-06-14 14:33:25 1010
原创 二分匹配模版
const int maxn = 10010;int vis[maxn];int y[maxn];vector G[maxn];int n;bool dfs(int u){ for(int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if(vis[v]) continue; vis[v] = true;
2014-06-12 19:47:26 928
转载 二分匹配题集(个别未完成)
【HDU】1068Girls and Boys 最大匹配★1150Machine Schedule 最小点覆盖★1151Air Raid 最小路径覆盖★1179Ollivanders 最大匹配★1281棋盘游戏 行列匹配+求关键点★★149850 years, 50 colors 行列匹配★1507Uncle Tom's Inherited
2014-06-12 18:38:14 897
转载 KM匹配题集
【HDU】2255奔小康赚大钱 模板题★1533Going Home 模板题★2426Interesting Housing Problem KM★3395Special Fish KM★2282Chocolate KM★2813One fihgt one KM★1853Cyclic Tour 最小费用圈覆盖★★3488Tour 最小
2014-06-12 17:00:56 852
原创 Light 1289 LCM from 1 to n 素数筛选位优化
题目来源:Light 1289 LCM from 1 to n题意:。。思路:从1到n 打过某个数是以一个素数的几次方 那么答案就乘以这个素数主要是筛选素数 存不下 位优化 一个整数32位标记32个数 内存缩小32倍是学习别人的#include #include #include #include using namespace std;const int maxn
2014-06-10 15:07:29 1047
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人