<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[acm2016]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/acm2016</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; acm2016]]></copyright><item><title><![CDATA[树的最小路径覆盖]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/60870530</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/60870530</guid><author>acm2016</author><pubDate>Wed, 08 Mar 2017 13:23:22 +0800</pubDate><description><![CDATA[树的最小路径覆盖：以SPOJ UOFTCG为例//============================================================================
// Name        : tree.cpp
// Author      : Qihan
// Version     :
// Copyright   : Your copyright n]]></description><category></category></item><item><title><![CDATA[字符匹配]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/60326130</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/60326130</guid><author>acm2016</author><pubDate>Sat, 04 Mar 2017 14:41:36 +0800</pubDate><description><![CDATA[KMPchar a[maxn];
char b[maxn];
int Next[maxn];
void getNext(int m) {
    int j = 0, k = -1;
    Next[0] = -1;
    while(j < m) {
        if(k == -1 || b[j] == b[k]) {
            j ++,k ++;]]></description><category></category></item><item><title><![CDATA[线段树]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/54849518</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/54849518</guid><author>acm2016</author><pubDate>Fri, 03 Feb 2017 21:28:54 +0800</pubDate><description><![CDATA[区间更新,单点查询]]></description><category></category></item><item><title><![CDATA[生成树]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/54847302</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/54847302</guid><author>acm2016</author><pubDate>Fri, 03 Feb 2017 15:37:11 +0800</pubDate><description><![CDATA[const int inf = 0x3f3f3f;
const int maxn = (300 + 10);bool vis[maxn];
int lowc[maxn];
int cost[maxn][maxn];int Prim(int n){
    int ans = 0;
    memset(vis,false,sizeof(vis));
    vis[0] = true;
    fo]]></description><category></category></item><item><title><![CDATA[Dijkstra + 堆优化]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/54846321</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/54846321</guid><author>acm2016</author><pubDate>Fri, 03 Feb 2017 13:01:41 +0800</pubDate><description><![CDATA[const int maxn = (30000 + 10);
const int inf = 0x3f3f3f3f;struct qnode{
    int v,c;
    qnode(int _v = 0,int _c = 0) : v(_v),c(_c){}
    bool operator<(const qnode &r)const{
        return c > r.c;]]></description><category></category></item><item><title><![CDATA[最长上升子序列]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431782</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431782</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 13:03:20 +0800</pubDate><description><![CDATA[最长上升子序列


int LIS(int n){
    int idx = 0;
    dp[idx ++] = arr[0];
    for(int i = 1;i < n;i ++){
        if(arr[i] > dp[idx - 1])    dp[idx ++] = arr[i];
        else{
            int where]]></description><category></category></item><item><title><![CDATA[点到线段的最大最小距离]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431770</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431770</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 13:00:17 +0800</pubDate><description><![CDATA[点到线段的最大最小距离

//点到线段的最大最小距离
//注意判断垂足是否在线段上
double Distance(Point a,Point b,Point c) {
    if(a.x == b.x) {
        if(c.y >= min(a.y,b.y) && c.y <= max(a.y,b.y))  
            return fabs(a.x -]]></description><category></category></item><item><title><![CDATA[多边形面积]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431751</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431751</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:56:02 +0800</pubDate><description><![CDATA[多边形面积

//任意多边形面积(凸or凹)
//也可以不存，一边输入一边求面积，前提是有序的
double Area(Point op[],int n) {
    double area = 0;
    for(int i = 0; i < n - 1; i ++) {
        area = area + op[i].x * op[i + 1].y;]]></description><category></category></item><item><title><![CDATA[求重心]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431743</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431743</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:52:49 +0800</pubDate><description><![CDATA[求重心

1.精确求重心(点的顺序可顺时针可逆时针，但必须有序)
double Area(Point p0,Point p1,Point p2) {
    double area = p0.x * p1.y + p1.x * p2.y + p2.x * p0.y;
    area = area - p1.x * p0.y - p2.x * p1.y - p0.x * p2.y;]]></description><category></category></item><item><title><![CDATA[叉积]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431733</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431733</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:50:04 +0800</pubDate><description><![CDATA[叉积


//求叉积（线段交，判断点的位置）
struct Point {
    double x;
    double y;
    Point() {}
    Point(double xx,double yy) {
        x = xx,y = yy;
    }
    Point operator-(const Point &b)const {]]></description><category></category></item><item><title><![CDATA[凸包-极角序-水平序]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431717</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431717</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:47:14 +0800</pubDate><description><![CDATA[凸包-极角序-水平序


// Graham算法, 极角序,复杂度O(nLog(n))
Point List[maxn];
int aStack[maxn],top;
bool cmp(Point p1,Point p2) {//极角序的排序规则
    double temp = Xmult(List[0],p1,p2);
    if(temp > 0)        return]]></description><category></category></item><item><title><![CDATA[快速乘/快速幂/矩阵快速幂]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431697</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431697</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:41:33 +0800</pubDate><description><![CDATA[快速乘/快速幂/矩阵快速幂

//快速乘
LLI Quick_mul(LLI a,LLI b,LLI mol){
    a %= mol;
    LLI re = 0;
    while(b){
        if(b & 1)   re = (re + a) % mol;
        b >>= 1;
        a = (a << 1) % mol;]]></description><category></category></item><item><title><![CDATA[组合数/Lucas定理]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431627</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431627</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:23:09 +0800</pubDate><description><![CDATA[组合数/Lucas定理


//组合数公式
LLI Combination(LLI n, LLI m) {      //求(n,m)
    LLI a = 1, b = 1;
    for (LLI i = n; i > n - m; i--)		a = a * i;
    for (LLI i = m; i > 0; i--)			b = b * i;
    retur]]></description><category></category></item><item><title><![CDATA[欧拉函数]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431586</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431586</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 12:16:02 +0800</pubDate><description><![CDATA[欧拉定理
如果两个正整数a和n互质，则n的欧拉函数 φ(n) 可以让下面的等式成立：
aφ(n)=1(modn);
如果两个正整数a和n互质，那么一定可以找到整数b，使得 ab-1 被n整除，或者说ab被n除的余数是1。
这时，b就叫做a的“模反元素”。
a的 φ(n)-1 次方，就是a的模反元素




欧拉函数


   
//求单个数字的欧拉函数，复杂度为O(√n]]></description><category></category></item><item><title><![CDATA[素数判断及筛法]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431537</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431537</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 11:54:57 +0800</pubDate><description><![CDATA[单个素数判断


//素数判断(小数据)
int prime(int n) {
    if (n == 0 || n == 1)  return 0;
    if (n == 2)  return 1;
    if (n % 2 == 0) return 0;
    for (int i = 3; i * i <= n; i = i + 2)
        if (n]]></description><category></category></item><item><title><![CDATA[GCD/扩展欧几里得]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431463</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431463</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 11:51:49 +0800</pubDate><description><![CDATA[GCD


LLI gcd(LLI a, LLI b) {
    return b == 0 ? a : gcd(b, a % b);
}






LCM



关于最小公倍数的结论:如果lcm(a,b) == n
其中
n=p1e1* p2e2 * p3e3…… * pnex
a=p1a1* p2a2 * p3a3…… * pnax
b=p1b1 *]]></description><category></category></item><item><title><![CDATA[一些数列]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431456</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431456</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 11:42:15 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[Baby_Step_Giant_Step]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431409</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431409</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 11:35:48 +0800</pubDate><description><![CDATA[Baby_Step_Giant_Step

//求解的是a^x = b(mod c)的最小x解 
struct node {
	int num;
	int val;
} baby[maxn];

bool cmp(node a, node b) {
	if (a.val != b.val)  return a.val < b.val;
	return a.num < b.num]]></description><category></category></item><item><title><![CDATA[佩尔方程]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431298</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431298</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 11:28:01 +0800</pubDate><description><![CDATA[佩尔方程


佩尔方程：
形如x2-D*y2=1(D是一个固定的正整数且D不是完全平方数)的方程称为佩尔方程
佩尔方程定理：
佩尔方程总有正整数解，若(x1,y1)是使x1最小的解，则每个解(xk,yk)都可以通过取幂得到：

xk + yk * sqrt(D) = (x1 + y1 *sqrt(D))k
xn+1 = x0xn +Dy0yn , yn+1 = y0xn+ x0y]]></description><category></category></item><item><title><![CDATA[一些公式]]></title><link>https://blog.youkuaiyun.com/acm2016/article/details/52431189</link><guid>https://blog.youkuaiyun.com/acm2016/article/details/52431189</guid><author>acm2016</author><pubDate>Sun, 04 Sep 2016 11:06:03 +0800</pubDate><description><![CDATA[1+2+3+……+n=(n*(n+1))/2
1^2+2^2+3^2+……+n^2=(n*(n+1)*(2n+1))/6
1^3+2^3+3^3+……+n^3=(((n*(n+1))/2))^2
1^4+2^4+3^4+……+n^4=(n*(n+1)*(2n+1)*(3n^2+3n-1))/30

对于某一个p，有一种通法可以求1p+2p+3p+……+np首先写出这个和式的前(p+1)项]]></description><category></category></item></channel></rss>