HarryGuo

Thanks ACM


  • Startseite

  • Kategorien

  • Über

  • Archiv

  • Tags

Burnside引理和Polya定理

Veröffentlicht am 2016-02-16 | in 算法讲解

一些先修知识

群

群指的是一个集合$G$,连同一种运算$\cdot$,它结合集合中的任意两个元素$a,b$,记为$a\cdot b$。
群必须满足四个公理:

封闭性:$\forall a,b \in G,a \cdot b \in G$
结合性:$\forall a,b,c \in G,a \cdot b \cdot c = a \cdot (b \cdot c)$
单位元:$\exists e \in G,\forall a \in G, a \cdot e = a$
逆元:$\forall a,b \in G,\exists b,a \cdot b = e$

比如自然数和加法就是一个群,因为无论两个自然数怎么相加,结果依然是自然数,但是自然数和减法就不构成一个群,显然,整数和减法才构成一个群。

Weiterlesen »

最短路算法

Veröffentlicht am 2016-02-12 | in 算法讲解

单源最短路

单源最短路的意思就是一个起点,算出到其他点的最短路,这里介绍三种算法,bellman-ford,spfa和dijkstra

BF算法

算法思想

BF是bellman_ford的简称,算法的想法非常简单,进行$|V|-1$次操作,每次操作对所有的边松弛。
松弛可以形象的理解为更新值,比如有一条从$u$到$v$的边,如果$u$上的值加上边的长度小于$v$上的值,那么就更新$v$上的值。
为什么这样做是对的呢?我们可以回顾整个过程,第一次操作,我们一定能将起点出去的点中的某一个点更新为最小值(这个点以后不会被更新),关于这点可以用反证法证明,如果没有一个点是更新完毕的,那么从起点到这个点必然存在一条比起点到这个点的边更短的路径,与假设矛盾。故而每次我们至少能确定一个点,所以总共需要$|V|-1$次(起点不用更新)。
最开始的图,0是起点

Weiterlesen »

积性函数与线性筛法

Veröffentlicht am 2016-01-25 | in 算法讲解

从筛素数算法谈起

埃氏筛法

怎么得到$[1,N]$的所有素数,在很早很早以前(古希腊?)就有了方法。
算法的思想是用当前得到的数去筛掉他的倍数,这样每次遍历到的未被筛掉的数一定是素数。

1
2
3
4
5
6
7
8
9
10
11
12
int prime[MAX_N],tot=0;
bool check[MAX_N];
void getPrime(){
memset(check,0,sizeof(check));
for(int i=2;i<MAX_N;i++){
if(check[i])continue;
prime[tot++]=i;
for(int j=2*i;j<MAX_N;j+=i)
check[j]=1;
}
}

不难发现,算法的每次会遍历$i$的所有倍数,所以算法的复杂度是调和级数的和,即$O(nlogn)$

欧拉筛法

仔细想想埃氏筛法的过程,就会发现每个数都会被它的所有素因子筛一遍,这样的操作是没有意义的,于是我们考虑一种更高效的筛法,使得每个数只被最小的素因子筛。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int prime[MAX_N],tot=0;
bool check[MAX_N];
void Euler(){
memset(check,0,sizeof(check));
for(int i=2;i<MAX_N;i++){
if(!check[i])prime[tot++]=i;
for(int j=0;j<tot;j++){
if(prime[j]*i>=MAX_N)break;
check[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
}

上述的算法由于每个数只被其素数筛掉,所以复杂度是$O(n)$的,故而又叫做线性筛法。


积性函数

定义

对于定义域在正整数的算术函数$f(n)$,若$f(1)=1$,且$f(ab)=f(a)f(b)$,其中$a,b$互质,则称$f(n)$为积性函数,如果$a,b$不互质,则称$f(n)$为完全积性函数。

性质

由算术基本定理,$f(n)$的值只由其素数因子的和其幂决定。
若$f(n)$是积性函数,$g(n)$是积性函数,那么$h(n)=f(n)g(n)$是积性函数
若$f(n)$是积性函数,那么$\sum_d|nf(d)$是积性函数

计算

如何得到积性函数往往是我们想关心的,由于上述性质来看,我们只要能够计算出$n$的最小的质数$p$的幂$k$,那么$f(n)=f(p^k)f(n/p^k)$。
所以问题便是求解一个数的最小素因子和其幂。我们发现欧拉筛法符合我们的要求,每个数只会被最小的素因子给筛掉。
由于素因子的幂不能用上述方法计算,所以只有因地制宜地计算。

常见积性函数

2016Camp之旅

Veröffentlicht am 2016-01-25 | in 心得

01-24

坑壁的飞机延误了四个小时,终于来到了帝都,虽然不是来玩耍的,但也做好了当咸鱼的准备。
比较印象深刻的是北京糟糕的空气(唔。。我的大成都)和各种不认识的菜。

来到酒店就见到了叉姐和q神,甚是开心。奇怪的酒店,有着复杂的结构和无法膈音的墙壁,大晚上时时传出大神们窃窃的笑声。
希望明天的学习有所收获。


01-25

总结三个字,当咸鱼。
好难好难的题(主要是傻逼题都看不出来怎么做)。
讲题解的时候根本不知道在说啥0.0,是时候补一波各种不熟悉的算法了。
会场还行,没有想象中的逗逼。下图为瞎比照相所得:


Weiterlesen »

乘法逆元

Veröffentlicht am 2016-01-23 | in 算法讲解

什么是逆元

所谓逆元是指对于一个二元运算$*$的集合而言,如果$e$是运算的单位远,那么$a*x=e$,就称$x$是$a$的逆元,比如对于加法而言,逆元就是0,对于乘法而言,逆元就是1。
现在这里讨论的是同余关系中的逆元,即$ax\equiv 1(mod m)$,对于给定的$a$,求解$x$。


如何求解

方程$ax\equiv 1(mod m)$其实等同与方程$ax-my=gcd(a,m)$,如此,便可以通过扩展欧几里得求解逆元,同时,这个方法指出有解的前提是$a$与$m$互质。

Weiterlesen »

线段树讲解二

Veröffentlicht am 2016-01-22 | in 算法讲解

概述

《线段树讲解一》讲解了单点更新区间查询的线段树,现在给出一种更普适的线段树,支持区间更新区间查询。

Weiterlesen »

CDOJ 1260 火火柴棍数字(二)

Veröffentlicht am 2015-12-18 | in ACM

代码:

https://github.com/HarryGuo2012/ACMCode/blob/worldLine/CDOJ/1260.cpp


下界和上届

下界

仔细观察这些火柴棍,发现数字1花费的火柴是最少的,所以下界是$2*m$

上界

数字8花费的火柴是最多的,所以上界时$7*m$
由上界下界便可确定时候满足题意了。


贪心的思想

首先我们至少需要满足下界,那么我们首先全部放1,发现1其实是个很小的数字,并且首位的优先级是最高的,所以我们不断将高位的1调整为9。
当火柴不够调整的时候,发现只需要添加一根火柴就能将1变成7,所以我们就不断将1变成7。
最后假如还有多余的火柴,此时我们需要分析一下会有多少剩余。

  • 假如最后一位是7,我们剩余一根火柴,我们发现最好的方案就是将最后一个7变成4
  • 假如最后一位是7,我们剩余两根火柴,我们发现最好的方案就是将最后一个7变成5
  • 假如最后一位是7,我们是不可能获得3根火柴的,否则最后一位一定会是9
  • 假如最后一位是9,那么我们就倒着将9变成8

线段树讲解一

Veröffentlicht am 2015-12-15 | in 算法讲解

概述

将区间不断二分划分所构成的树就是线段树。他的每个节点保存的是整个区间的某一段,如图所示:

线段树主要用于区间的动态查询和动态修改。

Weiterlesen »

第七届ACM趣味程序设计竞赛第三场(正式赛)

Veröffentlicht am 2015-12-12 | in ACM

宝贵资源

这道题采用贪心的思想就好了,首先我们可以得到所有点横纵两个方向上的最大跨度,用这个最大的跨度作为边长即可框住所有的点,如下图:

代码:

https://github.com/HarryGuo2012/ACMCode/blob/worldLine/CDOJ/1265.cpp


Weiterlesen »

Codeforces #335 div2

Veröffentlicht am 2015-12-11 | in ACM

代码:

代码戳我


Magic Spheres

题意:

给你三种颜色,每两个相同的颜色可以合成另外一种的一个颜色。问你能不能从初始的三种颜色,得到至少他给出的三种颜色的个数。

题解:

如果这题是恰好合成的话就是神题了,可如果是至少得话,就很简单了。如果一种颜色多了$x$个,那么他就能做出$x/2$这么多的贡献。现在统计一下有多少不足的,判断是否能用多余的补回去即可。

Weiterlesen »
123…5
Harry Guo

Harry Guo

An acmer

48 Artikel
6 Kategorien
31 Tags
GitHub Twitter Weibo
Links
  • AA
  • ICPC-camp
© 2017 Harry Guo
Erstellt mit Hexo
Theme - NexT.Muse