摘要: 算法:Dijstra算法题目大意:求出最短路径和次最短路径,如果最短路径+1==次最短路径,则输出最短路径条数+次最短路径条数,否则输出最短路径条数。用邻接表做,不用邻接矩阵,因为有重边。我开是用邻接矩阵做的,算法没问题,卡了半天,计算条数的时候会少。View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 const int INF = 1 << 30; 5 int dis[1005][2],v[1005][2],dp[1005][2],box[1005]; 6 struct node 7 { 8 i 阅读全文
posted @ 2011-09-24 10:52 zhangteng 阅读(404) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1328经典贪心问题。首先题目要求岸边的雷达要覆盖海中的岛屿,什么情况下岛屿才会被覆盖呢?也就是要修建的雷达到岛屿的距离小于雷达的覆盖半径,这样就会想到以岛屿为圆心做圆,与岸边的交点就是可以覆盖这个岛屿的雷达的修建区间,我们确定好每个岛屿的雷达修建区间后,对这些区间从小到大排序,比较一下就可以了,要注意被覆盖的区间。#include <stdio.h>#include <stdlib.h>#include <math.h>struct node{ double l,r;}p[1005];int cmp(co 阅读全文
posted @ 2011-08-03 10:17 zhangteng 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 有数列a[1],a[2],a[3]...a[n]for(i = 1;i <= n;i ++) ans += (a[i+1] - a[i])*(n-i)*i;sum = 2*ans 阅读全文
posted @ 2011-07-30 23:25 zhangteng 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 求某数n的阶乘的位数,可用如下公式求得:ans = 0.5*log10(2*n*pi)+n*log10(n/e) + 1;n>=1才能用这个公式,n==1时不用公式也行了。 阅读全文
posted @ 2011-07-30 23:16 zhangteng 阅读(164) 评论(0) 推荐(0) 编辑
摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3279数状数组#include <stdio.h>#include <string.h>#define lowbit(x) ((x)&(-x))int n;int a[100005],b[100005];void update(int x,int v){ while(x <= n) { a[x] += v; x += lowbit(x); }}int sum(int x){ int ret = 0; while(x) { ret += 阅读全文
posted @ 2011-07-27 19:54 zhangteng 阅读(209) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1006此题用到了中国剩余定理。若某数x分别被d1、d2、…、dn除得的余数为r1、r2、…、rn,则可表示为下式:x=R1*r1+R2*r2+…+Rn*rn+R*D其中R1是d2、d3、…、dn的公倍数,而且被d1除,余数为1;R2…、Rn同理D是d1、d2、…、的最小公倍数;R是任意整数,可根据实际需要决定;且d1、、…dn、必须互质,以保证每个Ri(i=1,2,…,n)都能求得.代码如下:#include <stdio.h>int main(){ int p,e,i,d,days,r1,r2,r3,ca = 1; for(i 阅读全文
posted @ 2011-07-21 10:46 zhangteng 阅读(175) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1611并查集的基本应用题View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 int father[30005],num[30005]; 4 5 void make_set(int x) 6 { 7 father[x] = x; 8 num[x] = 1; 9 }10 11 //查找x元素所在的集合,回溯时压缩路径12 int find_set(int x)13 {14 if(x != father[x])15 {16 father[x] = find_set( 阅读全文
posted @ 2011-07-20 18:25 zhangteng 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3259,poj1062,poj2253,poj1125,poj2240) (3)最小生成树算法(prim,kr 阅读全文
posted @ 2011-07-20 09:53 zhangteng 阅读(347) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1166可以直接暴力过:View Code 1 #include <stdio.h> 2 int main() 3 { 4 int a[50005],n,j,p,q,t,i,sum; 5 char ch[10]; 6 scanf("%d",&t); 7 for(j = 1;j <= t;j ++) 8 { 9 scanf("%d",&n);10 for(i = 1;i <= n;i ++)11 scanf("%d" 阅读全文
posted @ 2011-07-15 08:59 zhangteng 阅读(185) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2352#include <stdio.h>#define Max 17000#define Maxn 320005#define Lowbit(x) x&(-x)#define Rep(i,n) for(i = 0;i < n;i ++)int c[Maxn],r[Max];void update(int n){ while(n < 320005) { c[n] ++; n += Lowbit(n); }}int getSum(int n){ int sum = 0; while(n > 0) { su 阅读全文
posted @ 2011-07-13 08:40 zhangteng 阅读(126) 评论(0) 推荐(0) 编辑