- 博客(25)
- 资源 (2)
- 收藏
- 关注
原创 poj-3463-Sightseeing-求次短路
题意是求最短路的数量和比最短路长1的路的数量。此题的本质就是在dij的过程中,可以把一个点走两次。一次最短,一次次短。最后判断即可。#include #include#include#include#include#include#include#include#include#includeusing namespace std;#define maxn 210
2014-03-31 21:41:24 1455
原创 poj-3013-Big Christmas Tree-求最短路
题目的意思是让那你建立一颗圣诞树。圣诞树以1为头结点。圣诞树每条边的花费为当前边的权值乘以当前边的子树的节点的权值和。那么就相当于求每个节点乘以节点到根节点的最短路的和。#include #include#include#include#include#include#include#include#include#includeusing namespace
2014-03-31 17:13:15 1361
原创 poj-2449-Remmarguts' Date-A*+求K短路
A*算法:算出每一个点的g[x],h[x];g[x]:走到当前点的指。h[x]:当前点到终点的预计值。这个值应该小于等于实际值。然后每次取g[x]+h[x]最小的一个做为选取点。当第k次选到终点的时候,终点走到了k次。#include #include#include#include#include#include#include#include#include
2014-03-31 16:01:15 1092
原创 poj-1696-Space Ant-极角排序
就是求点逆时针旋转的次序。第一次选取最左下角的点。然后每次选取一个极角最小的点。#include#include#include#include#include#includeusing namespace std;#define maxn 200000#define eps 0.00001#define zero(x) ((fabs(x)<eps)?0:x)#defi
2014-03-25 16:03:59 1043
原创 poj-1556-The Doors-dij+线段相交
计算几何:求两条线段是否相交。求两条线段是否相交只需要求两条线段的两个短点是否都在另外一条线段的两侧即可。图论:dij求最短路#include#include#include#include#includeusing namespace std;#define maxn 200000#define eps 0.00001#define zero(x) ((fabs(x)
2014-03-24 17:03:22 1172
原创 poj-3304-Segments-线段与直线相交
判断线段与直线是否相交,注意精度问题。#include#include#include#include#includeusing namespace std;#define eps 0.00000001#define zero(x) ((fabs(x)<eps)?0:x)struct segn{ double x1,y1; double x2,y2;}seg
2014-03-24 14:47:31 916
原创 poj-2318-TOYS-计算几何
判断一个点在一条直线的哪一侧的时候,可以使用两种方法。1,用叉积判左右2,使用直线的斜率判断左右#include#include#include#includeusing namespace std;int pan(int x1,int y1,int x2,int y2){ return x1*y2-x2*y1;}int uu[5500];int ll[550
2014-03-24 13:36:06 1311
原创 hdu-4497-GCD and LCM-gcd的性质
lcm(x,y,z)=k;gcd(x,y,z)=t;若:x=a*t; y=b*t; z=c*t;则lcm(a,b,c)=k/t;若k/t=2^A;则a,b,c中至少有一个数为2^A,至少有一个数是2^0,另外一个数为2^(0~A);共6*A种情况。则,若k/t=2^A*3^B*5^C;a,b,c的情况数为:(6*A)*(6*B)*(6*C);#inc
2014-03-21 22:47:54 2384 1
原创 usaco-3.1-Humble Numbers-<set的使用>
题目到是不难,主要是用了set,方便。/*ID: rowanha3LANG: C++TASK: humble*/#includeusing namespace std;#define LL long longsetse;set::iterator it;LL num[111];int main(){ freopen("humble.in","r",stdin)
2014-03-21 17:12:45 1196
原创 Codeforces Round #236 (Div. 1) A,B,C
A题:水题不用说,乱搞搞就过了。#include#include#include#includeusing namespace std;int map[51][51];int main(){ int i,j,a,b,c,d,T,n,p; scanf("%d",&T); while(T--) { scanf
2014-03-18 12:18:27 1414
原创 hdu-1811-Rank of Tetris-并查集+拓扑排序
/*用并查集把成绩相等的人放在一起。然后根据关系,把他们连起来。然后拓扑排序。如果拓扑排序结束之后,拓扑到的边数和输入的边数不同,那么肯定出现环了,那么就是信息错误。0否则,如果某个时刻出现两个点的入度都为0,那么就出现信息不完整。其他的就是结果正确了。*/#include#include#include#includeusing namespace
2014-03-18 12:17:40 1330
原创 zoj-3497-Mistwald-矩阵
题意:有一个n*m的矩阵,矩阵上每一个格子有四个传送门,分别通向四个格子,题目给出了每个格子的四个传送门所能到达的地方。起点在(1,1),终点是(n,m),当走到终点的时候就不能再走了,也就是说一旦你到达了终点,就会直接离开这个矩阵。问说从起点开始走P(0 ≤ P ≤ 100,000,000)步能不能到达终点。输出的情况是True,Maybe和False。Ture对应的就是走了P步以后只能
2014-03-13 20:14:04 1592
原创 hdu-4686-Arc of Dream-矩阵
构造一个矩阵。一开始自己的思路搓了,没有把sum值一起构造到矩阵里。还是对矩阵不是很熟悉,接着做题。悲伤啊。。只要是这一项由前面几项推出来的,就能放在同一个矩阵里。#include#include#include#includeusing namespace std;#define LL __int64#define MOD 1000000007struct matr
2014-03-13 17:11:49 1052
原创 POJ-3613-Cow Relays-矩阵
题目大意: 给出一张无向连通图,求S到E经过k条边的最短路。解题思路: 利用递推的思路,先算出经过一条边的最短路,再算两条边......k-1条边,k条边的最短路 先看一下Floyd的核心思想: edge[i][j]=min(edge[i][j],edge[i][k]+edge[k][j]) i到
2014-03-13 01:43:20 1703 2
原创 矩阵十大经典题目之八-hdu-2157-How many ways??
题目大意:给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值把 给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就 等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。类似地,C*A的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的 路径数,我
2014-03-13 01:00:45 3628 3
原创 矩阵十大经典题目之七- Warcraft--III--守望者的烦恼
原文:我们可以用上面的方法二分求出任何一个线性递推式的第n项,其对应矩阵的构造方法为:在右上角的(n-1)*(n-1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其它地方都填0。例如,我们可以用下面的矩阵乘法来二分计算f(n) = 4f(n-1) - 3f(n-2) + 2f(n-4)的第k项: 利用矩阵乘法求解线性递推关系的题目我能编出一卡车来。这里给出的
2014-03-12 16:28:01 2184
原创 矩阵十大经典题目之六- poj-3070-Fibonacci
题目很简单。注意初始化,一开始没有初始化,然后就错了。悲伤。#include#include#include#includeusing namespace std;#define Nnum 31#define Mnum 31#define LL long longstruct matrix{ int mat[3][3]; matrix() {
2014-03-11 19:44:08 1751
原创 矩阵十大经典题目之四- VOJ1049-送给圣诞夜的礼品
题目链接:https://vijos.org/p/1049题目大意: 顺次给出m个置换,反复使用这m个置换对初始序列进行操作,问k次置换后的序列。m注意:在写矩阵的乘法的时候一定要注意,写好到底是谁乘以谁。写反了就悲剧了。还有,在求快速幂取模的时候要用非递归写法,不然容易RE;#include#include#include#includeusing namespace
2014-03-11 19:22:05 3337
转载 矩阵的十大经典题目,留份做题
经典题目1 给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置。操作有平移、缩放、翻转和旋转 这里的操作是对所有点同时进行的。其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心。如果对每个点分别进行模拟,那么m个操作总共耗时O(mn)。利用矩阵乘法可以在O(m)的时间里把所有操作合并为一个矩阵,然后每个点与该矩阵相乘即可直接得出最终该点的位置,总共耗时O
2014-03-11 16:50:05 12269
原创 矩阵十大经典题目之三-POJ-3233-Matrix Power Series-两次二分
如果k为偶数,那么(A+A^2+....A^K) = (A+...+A^K/2)+A^K/2*(A+...+A^K/2) 如果k为奇数,那么(A+A^2+....A^K) = (A+...+A^K/2)+A^K/2*(A+...+A^K/2)+A^k然后二分求解即可。思路简单。接下来说一下优化的问题:-------------------------------
2014-03-11 16:48:02 4051 2
原创 Codeforces Round #235 (Div. 2)
A,B,C水题,没啥好说的。D:dp[i][j]:现在用的数的状态为i,余数为j的数量st[i]:使用数i,需要增加的状态need[i]:使用数i最多可以增加到的状态。pan[i]:状态i所在的区间。dp[k+st[j]][(i*10+j)%m]+=dp[k][i];#include#include#include#includeusing namespac
2014-03-11 14:41:45 865
原创 取余运算
计算(a/b)%c 其中b能整除a如果b与c互素,则(a/b)%c=a*b^(phi(c)-1)%c如果b与c不互素,则(a/b)%c=(a%bc)/b对于b与c互素和不互素都有(a/b)%c=(a%bc)/b成立
2014-03-06 18:42:05 1201
原创 斐波那契数列的性质
fibonacci数列的性质:1.gcd(fib(n),fib(m))=fib(gcd(n,m))证明:可以通过反证法先证fibonacci数列的任意相邻两项一定互素,然后可证n>m时gcd(fib(n),fib(m))=gcd(fib(n-m),fib(m)),递归可求gcd(fib(n),fib(m))=gcd(fib(k),fib(l)),最后k=l,不然继续递归。K
2014-03-06 18:40:57 3486
原创 poj-2352-Stars-线段树
很裸的单点更新线段树#include#include#include#includeusing namespace std;#define maxn 110000struct list{ int l,r; int x;}node[maxn*6];struct listt{ int x,y; bool friend operator < (co
2014-03-03 21:15:55 919
原创 poj-2482-Stars in Your Window-线段树
线段树。题意:平面上有许多点,每个点有一个权值。给定一个大小确定的矩形,边与x,y轴平行,平移这个矩形能圈住的点的权值之和最大是多少。注意:矩形边上的不算,所以应该把矩形缩小一点。数据范围会超int,建议用long long做法:先把题目转化一下,用矩形的中心点来描述这个矩形的位置。并对每个点建立一个矩形中心点的活动范围,即矩形中心点在这个范围内即可覆盖到该点,建立方法就是
2014-03-03 19:50:18 1339 2
餐饮管理系统设计说明书
2014-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人