09 2012 档案
摘要:#include <iostream>#define val 1000000000;using namespace std;const int MAX = 2;typedef struct{ long long m[MAX][MAX];} Matrix;Matrix P = {0,1, 1,1 };Matrix I = {1,0, 0,1 };Matrix matrixmul(Matrix a,Matrix b) //������������{ int i,j,k; Matrix c; for (i = 0 ; i < MAX; i++) for (j = 0; j <
阅读全文
摘要:逆序数的应用本题的意思:很多奶牛有暴躁值,每个奶牛都有标号,当这些奶牛交换位置时,花费的时间=这2个奶牛的各自的暴躁值之和。求共交换多少次用树状数组就可以了。求暴躁值query(n)-query(x)就行了例如:2 3 1 ,共交换2次,才能变成 1 2 3; 1用了2次,次数*当前的值+前面比该数大的数的和; 2 3 比1 大,且在1的前头,所以是 1*2+2+3=7;也就是1*2+5=7; 5是这样算的,query(n)-query(x);共3个数,6-1=5;query()里是放的数的和;#include <iostream>#include <stdio.h>#
阅读全文
摘要:本题:求逆序数对的个数,用树状数组可求,将每个值赋成1,i-query(x)就是x这个数的逆序对数,也就是前面有几个比我大的数。#include <iostream>#include <stdio.h>#include <cstring>using namespace std;const int maxn=1008;int tree[maxn];int lowbit(int t){ return t & (-t); }void update(int pos,int val){ while(pos<=maxn) { tree[pos]+=val;
阅读全文
摘要:树状数组的模版题,还是一维的!直接A掉就行!#include <iostream>#include <cstring>#include <stdio.h>using namespace std;int num=0;int tree[50005],tmp[50005];inline int lowbit(int t){ return t & (t ^ (t-1));}inline void update(int pot,int val){ while(pot <=num) { tree[pot]+=val; //if (pot==1) {cout
阅读全文
摘要:这又是一个简单的二维树状数组的题目,题目很好,很简洁。开始时星星都不亮,每个坐标的星星只能是1或0,1代表亮,0代表灭就行了;所以如果这个星星已经是亮的了,就没必要再让它操作“亮”;如果这个星星已经是灭的了,也没必要执行 “灭”的操作了。还是要注意数组的下标从1开始,那是必须的,呵呵!还有输入的x1 x2 大小可能不是正常的,要判断一下,y1 y2同理;代码如下: 模版不用动的,早就背下来了!#include <iostream>#include <cstring>#include <stdio.h>using namespace std;const int
阅读全文
摘要:本题是二维的树状数组的基本应用,非常好,要先读懂题意:有很多方格,每个方格对应的坐标为(I,J),刚开始时每个格子里有1本书,然后让你统计一片区域有多少本书,还可以增加书和减少,移动书。注意本题的坐标是从0开始的,而树状数组必须从1开始,否则会死循环,所以输入坐标后,都先自动+1了;二维的模版基本也是不变的! lowbit() update() query()代码:#include <iostream>#include <cstring>#include <stdio.h>using namespace std;const int maxn=1008;int
阅读全文
摘要:1.求解Fibonacci的某一项(这个范围一般在45之内)这类题目longlong就可以了!2.求解Fibonacci的某一项模K(这个一般是大数),通用解决方法是构造矩阵求幂次这得使用矩阵连乘可以解决。见上面我推导的公式。要会使用模板。3.求解Fibonacci的前多少位(这个一般是大数),通用解法是使用通项公式下面举例来说明计算前4位123456.32=1234.56*10^2s=d.xxx*10^(len-4)log10(s)=log10(d.xxxxx)+log10(10^(len-4))=log10(d.xxxx)+len-4;log10(s)+4-len=log10(d.xxxx
阅读全文
摘要:高消一直是ACM中高层次经常用到的算法,虽然线性代数已经学过,但高消求解的问题模型及高消模板的应用变化是高消的最复杂之处。先介绍一下高消的基本原理:引入互联网czyuan的帖子:高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。高斯消元法的原理是:若用初等行变换将增广矩阵化为,则AX=B与CX=D是同解方程组。所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。以上是线性代数课的回顾,下面来说说高斯消元法在编程中的应用。首先,先介绍程序中高斯消元法的步骤:(我们设方程组中方程的个数为equ,变元的个数为var,注意:一般
阅读全文
摘要:Color the ballTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4460 Accepted Submission(s): 2392 Problem DescriptionN个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能
阅读全文
摘要:How Many Fibs?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2282 Accepted Submission(s): 926 Problem DescriptionRecall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn := fn-1 + fn-2 (n >= 3) Given two numbers a and b, calculate h
阅读全文
摘要:树状树组-----转载树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。 在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了对树状数组有个形 象的认识,我们先看下面这张图。如图所示,红色矩形表示的数组C[]就
阅读全文
摘要:•//拓扑排序,邻接阵形式,复杂度O(n^2)•//如果无法完成排序,返回0,否则返回1,ret返回有序点列•//传入图的大小n和邻接阵mat,不相邻点边权0•#define MAXN 100•int toposort(int n,int mat[][MAXN],int* ret){• int d[MAXN],i,j,k;• for (i=0;i<n;i++)• for (d[i]=j=0;j<n;d[i]+=mat[j++][i]);• for (k=0;k<n;ret[k++]=i){• for (i=0;d[i]&&i<n;i++);• if (i
阅读全文

浙公网安备 33010602011771号