随笔分类 -  POJ

1 2 下一页
poj 3264 Balanced Lineup
摘要:一个简单的线段树,憋了我好久。问题出在了存数据的数组开得不够,因为我建立线段树时要从D-1开始,但是D那一行的元素个数,可能会超过50000所以,存数据的数组要开的大一些。 1 #include<stdio.h> 2 #define INF 1000000000 3 4 int n, m,D,a[(50000+1000)<<1],treemin[51000<<2], treemax[51000<<2]; 5 6 void build() 7 { 8 for(int i = D-1; i > 0; i --) 9 {10 if(treemin 阅读全文
posted @ 2012-10-09 20:03 BFP 阅读(205) 评论(0) 推荐(0) 编辑
poj 2388 Who's in the Middle
摘要:一个快排,水题。 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int n, a[11000]; 5 6 int cmp(const void *_p, const void *_q) 7 { 8 int *p = (int *)_p; 9 int *q = (int *)_q;10 return *p - *q;11 }12 13 int main()14 {15 while(~scanf("%d",&n))16 {17 for(int i = 0; i < n; i ++)18 ... 阅读全文
posted @ 2012-09-14 13:26 BFP 阅读(155) 评论(0) 推荐(0) 编辑
poj 2299 Ultra-QuickSort
摘要:归并排序模版: 1 #include<stdio.h> 2 3 long long int ans, n; 4 long long int a[501000], b[501000]; 5 6 void mergesort(int start, int end) 7 { 8 if(start < end) 9 {10 int i, j, mid = (start+end)>>1;11 mergesort(start, mid);12 mergesort(mid+1, end);13 int t = start;1... 阅读全文
posted @ 2012-09-14 12:56 BFP 阅读(143) 评论(0) 推荐(0) 编辑
poj 1442 Black Box
摘要:ac了想了好久的题,真心高兴,虽然运行有点慢,但却是用c自己写的堆,代码很短;思路:维护两个堆,一个小顶堆用于存储所给数列最大的一部分,一个大顶堆用于存储所给数列剩下的最小一部分。运行过程:7 4 3 1 -4 2 8 -1000 2 1 2 6 6当输入1时,我们将3压入存储较大值的小顶堆中,判断存储较小值的大顶堆堆顶为NULL,则直接将3从小顶堆中取出,压入大顶堆,更新两个堆,输出大顶堆堆顶的值。当输入2时,我们将1压入存储较大值的小顶堆中,判断存储较小值的大顶堆堆顶为不为空,并且小顶堆的堆顶1<3,则我们将1和3互换,从而保证小顶堆始终存储较大的,大顶堆始终存储较小的。因为到了区间 阅读全文
posted @ 2012-09-13 17:21 BFP 阅读(368) 评论(0) 推荐(0) 编辑
poj 3253 Fence Repair
摘要:用堆来实现优先队列:就本题来说即:1.建立最小堆 2.取堆顶元素a,更新最小堆 3.取堆顶元素b,更新最小堆 4.将c = a+b 插入最小堆,更新最小堆,并累加c(为所求) 5.重复步骤1,直到堆顶元素等于输入数据的和,即堆里仅有一个元素。注意:最后累加c所用的数据类型为long long型。 1 #include<stdio.h> 2 #include<string.h> 3 #define INF 0x7fffffff 4 5 int n, D, sum, ... 阅读全文
posted @ 2012-09-10 13:34 BFP 阅读(155) 评论(1) 推荐(0) 编辑
poj 1001 Exponentiation
摘要:1 #include<stdio.h> 2 #include<string.h> 3 4 int n, p, len, flag; 5 char a[10],s[10], sum[200], sum2[200]; 6 7 void solve() 8 { 9 memset(sum2,0,sizeof(sum2));10 len += 5;11 for(int i = 0; i < p; i ++)12 {13 int c = 0;14 for(int j = 0; j <= len; j ++)15 {16 ... 阅读全文
posted @ 2012-09-03 11:01 BFP 阅读(227) 评论(0) 推荐(0) 编辑
poj 1789 Doing Homework again
摘要:思路:找到当前所给延时最长的所包含的作业里面分数最大的完成它,eg:71 4 6 4 2 4 33 2 1 7 6 5 4当我在第7天的时候,没有延时 >=7 的,所以没有满嘴条件的,当在第6天的时候, 只可能完成一个作业就是1,完成它。第5天的时候可以完成延时为6的那个作业,但是第六天已经完成了,所以没有满足要求的,第四天的时候有四个满足要求的,一个延时为 6 三个延时为 4, 找到分数最大的以此类推即可: 1 #include<stdio.h> 2 #include<string.h> 3 4 int t, n, dl[1100], sc[1100]; 5 i 阅读全文
posted @ 2012-09-02 14:55 BFP 阅读(226) 评论(0) 推荐(0) 编辑
poj 2037 今年暑假不AC
摘要:简单贪心,选择不相交区间: 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int n, s[25], e[25], r[25]; 5 6 int cmp(const void *_p, const void *_q) 7 { 8 int *p = (int *)_p; 9 int *q = (int *)_q;10 return e[*p]-e[*q];11 }12 13 int main()14 {15 while(scanf("%d",&n))16 {17 if(n == 0) brea... 阅读全文
posted @ 2012-09-02 14:02 BFP 阅读(242) 评论(0) 推荐(0) 编辑
poj 3225 Help with Intervals
摘要:模版题,线段树区间赋值,反转,看别人代码敲的; 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXD 132000 4 #define N 131070 5 int tree[4 * MAXD], rev[4 * MAXD], to[4 * MAXD], a[MAXD]; 6 void build(int cur, int x, int y) 7 { 8 int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1; 9 阅读全文
posted @ 2012-08-25 13:23 BFP 阅读(173) 评论(0) 推荐(0) 编辑
poj 2528 Mayor's posters
摘要:线段树+区间离散化:弄了好久,注意数组范围。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define MAXN 10000+100 5 6 int T, n, a[MAXN<<2], b[MAXN<<2], r[MAXN<<2], h[MAXN<<2], to[MAXN<<4]; 7 8 int cmp(const void *_p, const void *_q) 9 { 10 int *p = (int *) 阅读全文
posted @ 2012-08-24 14:08 BFP 阅读(133) 评论(0) 推荐(0) 编辑
poj 2239 Selecting Courses
摘要:确定用二分图算法,就找好对应关系,本题对应关系为一周的所有课节N=7*12,和每一科的对应。 1 //1274,2239,2584,2536,2446 2 //http://wenku.baidu.com/view/9962910590c69ec3d5bb75da.html 贪心最大二分匹配 3 //匈牙利树和增广轨 4 5 #include <cstdio> 6 #include <cstring> 7 8 int used[610]; //是否在覆盖点中 9 10 int nmap[610][610];11 12 int path[610];//前一个13 14 i 阅读全文
posted @ 2012-08-08 11:01 BFP 阅读(163) 评论(0) 推荐(0) 编辑
poj 1274 The Perfect Stall
摘要:二分图,匈牙利算法: 1 //1274,2239,2584,2536,2446 2 //http://wenku.baidu.com/view/9962910590c69ec3d5bb75da.html 贪心最大二分匹配 3 //匈牙利树和增广轨 4 5 #include <cstdio> 6 #include <cstring> 7 8 int used[610]; //是否在覆盖点中 9 10 int nmap[610][610];11 12 int path[610];//前一个13 14 int P,N;15 16 int cross(int k)17 {18 阅读全文
posted @ 2012-08-08 10:39 BFP 阅读(185) 评论(0) 推荐(0) 编辑
poj 2186 Popular Cows
摘要:未完成,TLE要查: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 10000 + 10 4 5 int first[MAXN], next[50010],u[MAXN],v[MAXN],n, m, ans1; 6 int dfn[MAXN],low[MAXN],col[MAXN],stk[MAXN],ins[MAXN],ind,top,cols,tmp; 7 int outdg[MAXN],zeroout; 8 9 void dfs(int u)10 {11 dfn[u] = low[u] = ++in 阅读全文
posted @ 2012-08-07 15:25 BFP 阅读(132) 评论(0) 推荐(0) 编辑
poj 1236 Network of Schools
摘要:强联通分量模版题,tarjan算法: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 110 4 5 int n, p, ans1, ans2, u[MAXN*MAXN], v[MAXN*MAXN], next[MAXN*MAXN], first[MAXN]; 6 int dfn[MAXN], low[MAXN], col[MAXN], stk[MAXN], ins[MAXN], ind, top, cols, tmp; 7 int indg[MAXN], outdg[MAXN], zeroin, zero 阅读全文
posted @ 2012-08-07 10:12 BFP 阅读(184) 评论(0) 推荐(0) 编辑
poj 1258 Agri-Net
摘要:简单的模板题:prim算法适合浓密图: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 110 4 #define INF 100000000 5 6 int n, v[MAXN], low[MAXN], w[MAXN][MAXN]; 7 8 void solve() 9 {10 int ans = 0;11 memset(v,0,sizeof(v));12 v[0] = 1;13 for(int i = 1; i < n; i ++) low[i] = w[0]... 阅读全文
posted @ 2012-08-05 12:40 BFP 阅读(150) 评论(0) 推荐(0) 编辑
poj 2485 Highways
摘要:用kruskal()算法处理》》。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define MAXN 300000 4 5 int T, n, h, u[MAXN], v[MAXN], w[MAXN], p[510], r[MAXN]; 6 7 int cmp(const void *_p, const void *_q) 8 { 9 int *p = (int *)_p;10 int *q = (int *)_q;11 return w[*p] - w[*q];12 }13 14 int find(int x){ret.. 阅读全文
posted @ 2012-08-04 11:11 BFP 阅读(124) 评论(0) 推荐(0) 编辑
poj 1789 Truck History
摘要:prim求最小生成树。 1 #include<stdio.h> 2 #include<string.h> 3 #define INF 100000000 4 #define MAXN 2100 5 6 int n, v[MAXN], low[MAXN], d[MAXN][MAXN]; 7 char s[MAXN][10]; 8 9 void prim()10 {11 int ans = 0;12 memset(v, 0, sizeof(v));13 v[0] = 1;14 for(int i = 1; i < n; i ++) low[i] = d[0][i... 阅读全文
posted @ 2012-08-04 10:32 BFP 阅读(95) 评论(0) 推荐(0) 编辑
poj 2240 Arbitrage
摘要:又是套汇为题,初始化d数组为1就可以了,用bellman—ford算法。 1 #include<stdio.h> 2 #include<string.h> 3 4 int n, m, num, u[2000], v[2000]; 5 double w[2000], d[50], ra; 6 char s[50][100], s1[100], s2[100]; 7 8 void solve() 9 {10 for(int i = 0; i <= n; i ++) d[i] = 1;11 for(int k = 0; k < n-1; k ++)12 for(i 阅读全文
posted @ 2012-08-03 15:19 BFP 阅读(120) 评论(0) 推荐(0) 编辑
poj 1125 Stockbroker Grapevine
摘要:用floyd算法求出任意两点之间的距离,然后从一点出发找到其他点的最大的距离,找从所有点出发到其他点里的最大距离这一集合的最小值,就是所求.#include<stdio.h>#include<string.h>#define MAXN 110int n, m, d[MAXN][MAXN];int main(){ while(scanf("%d",&n)) { if(n == 0) break; memset(d,0x3f,sizeof(d)); for(int i = 1; i <= n; i ++) { ... 阅读全文
posted @ 2012-08-03 13:22 BFP 阅读(122) 评论(0) 推荐(0) 编辑
poj 2253 Frogger
摘要:这道题我是用并查集处理的,将所有边排序,当生成树里出现第一个点,第二个点时(或第0点第1个点),结束并查集,输出已处理边里的最大值就可以了。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #define MAXN 210 5 int n,g,h,u[MAXN*MAXN],v[2*MAXN*MAXN],p[MAXN],r[2*MAXN*MAXN]; 6 double x[MAXN],y[MAXN],w[2*MAXN*MAXN],flag[2*MAXN*MAXN]; 7 8 int c 阅读全文
posted @ 2012-08-03 11:23 BFP 阅读(161) 评论(0) 推荐(0) 编辑

1 2 下一页

点击右上角即可分享
微信分享提示