摘要: 用线段树求最小值就行了#include<iostream>#include<cstring>#include <cstdio>#include<string>#include<queue>#include<vector>#include<map>#include <set>#include<ctime>#include<cmath>#include <cstdlib>#include <algorithm>#include <iomanip> 阅读全文
posted @ 2012-04-18 22:19 HaoHua_Lee 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 省赛弱爆了,水题都A不调=。=。。。。H,J死的很惨,F题连看都没看上一眼,dp啊,摸都没摸上View Code #include<iostream>#include<cstring>#include <cstdio>#include<string>#include<queue>#include<vector>#include<map>#include <set>#include<ctime>#include<cmath>#include <cstdlib>#in 阅读全文
posted @ 2012-04-17 22:21 HaoHua_Lee 阅读(313) 评论(0) 推荐(0) 编辑
摘要: http://hi.baidu.com/czyuan_acm/blog/item/8cc45b1f30cefefde1fe0b7e.html三分法模版double Calc(Type a){ /* 根据题目的意思计算 */}void Solve(void){ double Left, Right; double mid, midmid; double mid_value, midmid_value; Left = MIN; Right = MAX; while (Left + EPS < Right) { mid = (Left + Ri... 阅读全文
posted @ 2012-04-09 15:32 HaoHua_Lee 阅读(217) 评论(0) 推荐(0) 编辑
摘要: UVALive 5789题意 给你1到n的区间,m组操作每组操作有a,b两个数字, 指将[a,b]变为1,求左右两边最靠近[a,b]区间为0的位置此题所给的m组区间不会相交,开始读题是看错了 ,写了个可能相交的View Code #include<iostream>#include<cstring>#include <cstdio>#include<string>#include<queue>#include<vector>#include<map>#include <set>#include< 阅读全文
posted @ 2012-04-08 11:02 HaoHua_Lee 阅读(177) 评论(0) 推荐(0) 编辑
摘要: //b^(-1)是 b的逆元素 (%p)//2的逆元素是15 (%29) ,因为2*15=30=1 %29//21的逆元素是18 (%29) ,因为21*18=378%29=1 %29//%运算法则 1. (a*b) %p= ( a%p) *(b%p)//%运算法则 2. (a/b) %p= ( a *b^(-1)%p) !!!! // b*b^(-1)= 1 (mod p) 若求b*b的逆元 ,则等同于 ((b*b)%p)*(b*b)^(-1)=1(mod p)#define LL long long LL ex_gcd(LL a,LL b,LL &x,LL &y){ ... 阅读全文
posted @ 2012-04-07 19:46 HaoHua_Lee 阅读(230) 评论(0) 推荐(0) 编辑
摘要: UVA 11818状态压缩+dp 判断当前点是否为必胜点,则看子节点是否存在必败点 ,若子节点全为必胜点,则当前点为必败点View Code #include<iostream>#include<cstring>#include <cstdio>#include<string>#include<queue>#include<vector>#include<map>#include <set>#include<ctime>#include<cmath>#include < 阅读全文
posted @ 2012-04-07 09:14 HaoHua_Lee 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 异或模版:int A[mMAX][mMAX],ans[mMAX];bool Gauss(int r,int c){ for( int k=0; k<r; k++){ int i ; for(i=k;i<r && A[i][k]==0;i++); if(i==r) continue; if(i > k){ for(int j=0; j<=c; j++) swap(A[i][j], A[k][j]); } for(int i=0; i<... 阅读全文
posted @ 2012-04-06 01:00 HaoHua_Lee 阅读(203) 评论(0) 推荐(0) 编辑
摘要: zoj 3497http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3497题目意思是给定一个有向图(最多25个节点,每个节点的出度最多为4),给定起点和终点,然后从起点开始走,走到终点就停止,否则一直往下走,问能不能P步到达终点。也就是说从起点出发,走一条长度为P的路径,路径中间点不能经过终点(但可以反复经过其他点)。如果从起点出发P步后,不能到达终点,就是False,如果可以到达终点也可以到其他别的点,就是Maybe,如果P步后只能到达终点(到别的点没有长度为P的路径),则是Yes。显然的矩阵乘法。图的临接矩阵A的p次方 阅读全文
posted @ 2012-04-01 15:31 HaoHua_Lee 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 欧拉数题意:对于任一种N的排列A,定义它的E值为序列中满足A[i]>i的数的个数。给定N和K(K<=N<=1000),问N的排列中E值为K的个数。解法:简单DP。dp[i][j]表示i个数的排列中E值为j的个数。假设现在已有一个E值为j的i的排列,对于新加入的一个数i+1,将其加入排列的方法有三:1)把它放最后,加入后E值不变 2)把它和一个满足A[k]>k的数交换,交换后E值不变 3)把它和一个不满足A[k]>k的数交换,交换后E值+1 根据这三种方法得到转移方程dp[i][j] = dp[i - 1][j] + dp[i - 1][j] * j + dp[i 阅读全文
posted @ 2012-03-30 20:22 HaoHua_Lee 阅读(342) 评论(0) 推荐(0) 编辑
摘要: hdu 4169题意:给定一棵树,每一节点都有一权值,要求选出总权值最大的K个点,同时这K个点中任意一个点都不能是其他节点的祖先。节点数太多了,150000 ,爆内存的,所以开了一个临时数组保存注意优化 子分支的状态数 复杂度O(n*k^2) 1 #include<iostream> 2 #include<cstring> 3 #include <cstdio> 4 #include<string> 5 #include<queue> 6 #include<vector> 7 #include<map> 8 # 阅读全文
posted @ 2012-03-27 22:16 HaoHua_Lee 阅读(210) 评论(0) 推荐(0) 编辑