2013年9月4日

eight - zoj 1217 poj 1077

摘要: 学习了多位大牛的方法,看看到底能把时耗降到多少?A* 1 // zojfulltest: 30000ms 2 # include 3 # include 4 # include 5 # include 6 7 # define DATA(x,i) (((x)>>((i)*3))&0x7) 8 # define ZERO(x) ((x)>>27) 9 # define F(x) ((x)&0xFF) 10 # define D(x) (((x)>>8)&0xF) 11 # define P(x) ((x)>>12) 12 # 阅读全文

posted @ 2013-09-04 21:12 getgoing 阅读(925) 评论(0) 推荐(0) 编辑

2013年1月12日

堆排序

摘要: 堆排序算法主要过程是保持堆的性质:max_heapify()。它的作用是:对一个大顶堆,如果拿掉堆顶元素,换成另一个元素,如果这个元素比堆顶的左右儿子小,那么就不满足大顶堆的性质,这时,max_heapify()通过逐步向下进行更新,可以达到维护大顶堆的效果,具体是将新的堆顶元素与左右儿子比较,如果比左右儿子都大说明不用更新就是一个大顶堆了;如果比左儿子小,将这个值与左儿子互换,然后对左子树递归进行同样的操作,最后形成一个大顶堆。堆排序的过程是,首先对所给元素建一个大顶堆,那么这些元素中的最大值显然就是堆顶元素了,然后,把这个元素放到序列(数组)的最后,对除了它之外的元素进行一次max_hea 阅读全文

posted @ 2013-01-12 15:17 getgoing 阅读(417) 评论(0) 推荐(0) 编辑

2012年10月13日

[2012.10.13] 省赛总结

摘要: 总结了,就可以更坦然面对这次比赛的结局,也更坦然地投入考研复习。赛场上:前面队伍整体发挥不错,很顺利;后面碰到了 F 和 J ,当时这两题出的队伍比较多,并且没有仔细考虑过这两题,认为很有希望,决定专心搞这两道,F 稍微卡了一下过了之后,(可能理所当然地)认为 J 题会不用很久就能拿下,当时 J 题后面也有好多过了的,没想到是个坑。卡了一会,各种常见的解题入口都试了,始终没法和统一,还有 1h ,继续啃,感觉不对,打断建议搞 D,尝试下过了,后来我们再看 J 题,感觉很多队过我们却卡了,这道题属于特殊情况,想了可能是数据水(虽然不太可能)、想了最后也试了暴力。由于组队模式,最强的当然要担任主力 阅读全文

posted @ 2012-10-13 22:44 getgoing 阅读(389) 评论(0) 推荐(0) 编辑

2012年10月9日

[转载]PKU 水题集

摘要: (转载自网络。)列表:1000 1003 1004 1005 1007 1046 1118 1207 1247 1248 1250 1298 1316 1318 1326 1338 1350 1450 1477 1484 1493 1504 1517 1528 1543 1552 1575 1580 1595 1656 1658 1750 1853 1877 1939 2006 2013 2019 2027 2028 2039 2070 2081 2090 2105 2109 2128 2141 2159 ... 阅读全文

posted @ 2012-10-09 16:20 getgoing 阅读(355) 评论(0) 推荐(0) 编辑

2012年8月25日

2012 Multi-University Training Contest 4 D - Trouble

摘要: hash 1 # include <stdio.h> 2 # include <string.h> 3 4 # define N 205 5 # define M 100007 6 7 typedef long long int LL; 8 9 int n;10 LL a[6][N];11 int head[M], next[N*N+N];12 13 int hash(LL x)14 {15 return ((x%M)+M)%M;16 }17 18 void init_hash_table(void)19 {20 memse... 阅读全文

posted @ 2012-08-25 15:13 getgoing 阅读(247) 评论(0) 推荐(0) 编辑

2012年8月24日

HDOJ 4027 Can you answer these queries?

摘要: 此题陷阱多多:数据类型(相应的输入输出)、区间端点可能反序、如果用C提交注意强制转换的格式(int(x)是不对的);思路:每次如果开根号的区间内含有未达到0或1的数就一直向下,找到这些数并直接更新一次,这样最多跟新4*N次,加上线段树的复杂度,为4*N*lgN,是最坏情况的复杂度,可能由于开根号耗时较多,总体比较耗时(700ms+),查询的复杂度为lgN。# include <stdio.h># include <math.h># define N 100005# define ls ((r)<<1)# define rs ((r)<<1|1)# 阅读全文

posted @ 2012-08-24 21:40 getgoing 阅读(391) 评论(0) 推荐(0) 编辑

PKU 2892 Tunnel Warfare

摘要: 维护某个位置 i 左右可以到达的最大长度lx, ly,那么询问的输出为lx+ly-1(当然,如果 i 已经被标记(炸毁且尚未修复)输出0,这种情况加个判断);容易发现: 每次删除一个点时,这个点左边可以到达的所有点可以向右到达的最大长度要减去 ly,同理这个点右边的点可以到达左边的最大长度要减去 lx; 当修复一个点时,可以先询问它左(右)边的那个点的最大连通长度 lx(ly),那么可以对它前面 lx 个点向右可以到达的长度加上 ly+1,同理对它后面 ly 个点向左可以到达的最大长度加上 lx+1(两种操作都包含当前这个点),这样就相当于完成了修复;由于每次修复的是最近一次删除的点,可以.. 阅读全文

posted @ 2012-08-24 20:24 getgoing 阅读(247) 评论(0) 推荐(0) 编辑

HDOJ 3397 Sequence operation

摘要: 难在异或对询问区间最大连续1长度的影响,每次异或时,把异或标记更新到底(cover标记不为-1),直接更新当前最大连续1区间的长度。 1 # include <stdio.h> 2 3 # define N 100005 4 5 # define ls ((r)<<1) 6 # define rs ((r)<<1|1) 7 # define mid (((x)+(y))>>1) 8 9 int n, m, a[N]; 10 int cover[N<<2]; 11 int sum[N<<2], lcon[N<<2 阅读全文

posted @ 2012-08-24 17:23 getgoing 阅读(287) 评论(0) 推荐(0) 编辑

PKU 3667 Hotel

摘要: 维护左、右、总的连续区间长度,在 update 求总的最大长度时,写成了tsum[r] = Max(rsum[ls]+lsum[rs], Max(lsum[r], rsum[r])); 所以一直出错。/*notepad++ 调用 g++ 编译cmd /k C:\ACMSOFT\DEVC\Bin\g++.exe -g -W -Wall -o $(CURRENT_DIRECTION)\$(NAME_PART).exe $(FULL_CURRENT_PATH)*/# include <stdio.h># define ls ((r)<<1)# define rs ((r)&l 阅读全文

posted @ 2012-08-24 12:51 getgoing 阅读(226) 评论(0) 推荐(0) 编辑

2012年8月23日

[最小表示]PKU 3349 Snowflake Snow Snowflakes

摘要: 最小表示法 + 排序 + 枚举, 整体复杂度:O(n*lgn*6)这道题普通的枚举就可以做,hash 和枚举差不多,繁琐的地方都在判断是否同构那里,我干脆用最小表示法把原串转换为原串的最小表示和反串的最小表示中的较小者,然后排序,枚举相邻的位置的串是否相等;最小表示法的一点更正:这篇博文中作者做了一个优化,我以前是参考优化后的做法写的,现在发现评论中有人提到了一个问题(最小位置直接出现在对升序序列后的情况下,这个优化实际上使复杂度变为了O(n^2),已经验证),把 j 减少到 i+1 不合理,所以又回到了原始的做法,具体见代码。# include <stdio.h># includ 阅读全文

posted @ 2012-08-23 22:41 getgoing 阅读(396) 评论(0) 推荐(0) 编辑

[二分] PKU 1840 Eqs

摘要: 二分:3+2;# include <stdio.h># include <stdlib.h># define trq(x) ((x)*(x)*(x))int a[5];long long ans = 0;int h[105];int f[305*105*105], g[305*105];/************************************************************/int cmp(const void *x, const void *y){ return *(int*)x - *(int*)y;}int bins(int *v 阅读全文

posted @ 2012-08-23 17:15 getgoing 阅读(230) 评论(0) 推荐(0) 编辑

[hash] PKU 2002 Squares

摘要: 此题数据范围其实很小,枚举主对角线,求出另两个点的坐标,看是否存在(所有点都不相同);hash的模版写法:# include <stdio.h># include <string.h># define odd(x) (((x)+100000)&0x1)# define MAXN 1005# define MOD 10007int n;int x[MAXN], y[MAXN];int head[MOD], next[MAXN];int hash(int xx, int yy){ int hkey = xx*13131 + yy; return (hkey%MOD 阅读全文

posted @ 2012-08-23 15:26 getgoing 阅读(235) 评论(0) 推荐(0) 编辑

[数组hash] PKU 3274 Gold Balanced Lineup

摘要: 题解;数组hash:hash的是排列,不能用相加、相乘取模,常用hash函数的资料; 1 # include <stdio.h> 2 # include <string.h> 3 4 # define get(x, i) ((((x)>>(i))&0x1) ? 1:0) 5 6 # define N 100005 7 # define K 35 8 # define MOD 100007 9 10 int sum[N][K], c[N][K], a[N], h[MOD << 3];11 12 int Max(int x, int y)13 阅读全文

posted @ 2012-08-23 10:08 getgoing 阅读(236) 评论(0) 推荐(0) 编辑

2012年8月22日

PKU 3225 Help with Intervals

摘要: 线段树经典入门题目;这道题有几点不同的地方:1. 维护的是集合,一个点或者一段区间都是一个集合,(2,3) 是一个集合,不能简单的用线段代替集合;2. 用离散的 01 值表示集合,对集合的运算需要转化为 01 区间的异或与赋值操作;3. 01 区间上进行异或和赋值,在 pushdown 的时候只能存在一个信息,一个线段要么被赋值,要么异或,不能既被赋值,同时进行异或(cover[]和xor[]不能同时有效);4. 结果要求输出运算结果(集合),在查询时,要做的不是查询到左端点、右端点,而是把被赋值的区间全部标记下来(O(n)),然后一次扫描完成输出,这道题卡了很长时间就是这里没想清楚(既然用了 阅读全文

posted @ 2012-08-22 21:44 getgoing 阅读(320) 评论(0) 推荐(0) 编辑

2012年8月21日

USACO sec2.1 Healthy Holsteins

摘要: 状态压缩,先将生成的所有状态排序,然后枚举即可。/*PROG : holsteinLANG : C*/# include <stdio.h># include <stdlib.h>struct scoop{int a[30];};int V, G, r[(1 << 17) + 5];struct scoop g[17], v;/***************************************************/int bcnt(int x){ int ret = 0; while (x) { ++ret; x &= x-1; .. 阅读全文

posted @ 2012-08-21 17:41 getgoing 阅读(293) 评论(0) 推荐(0) 编辑

USACO sec2.1 Ordered Fractions

摘要: 首先两重 for 循环对可能取的值约分,分子分母分别存放,根据比较分数大小的方法排序,然后按顺序输出(相同的只输出一个);/*PROG : frac1LANG : C++*/# include <stdio.h># include <stdlib.h># define MAXN (160 * 160)/***************************************************/int num[MAXN], den[MAXN], r[MAXN], m = 0;int cmp(const void *xx, const void *yy){ in 阅读全文

posted @ 2012-08-21 16:00 getgoing 阅读(296) 评论(0) 推荐(0) 编辑

USACO sec2.1 Hamming Codes

摘要: 直接枚举就行了,不带回溯的搜索。/*PROG : hammingLANG : C++*/# include <stdio.h># define id(x) ((x)>>3)# define of(x) ((x)&0x7)# define get(x) ((h[id(x)]>>of(x))&0x1)# define set(x) (h[id(x)] |= (0x1<<of(x)))int n, b, d;char h[(1<<5) + 1];int sol[70];/*************************** 阅读全文

posted @ 2012-08-21 15:24 getgoing 阅读(228) 评论(0) 推荐(0) 编辑

USACO sec1.5 Checker Challenge

摘要: 八皇后问题,最大输入13,单case,时限1s;和 HDOJ 不同的是:Do not precalculate the value and print it (or even find a formula for it); that's cheating. Work on your program until it can solve the problem properly. If you insist on cheating, your login to the USACO training pages will be removed and you will be disqual 阅读全文

posted @ 2012-08-21 11:32 getgoing 阅读(319) 评论(0) 推荐(0) 编辑

USACO sec1.5 Superprime Rib

摘要: 没打表。/*PROG : sprimeLANG : C++*/# include <stdio.h>/*******************************/char isp(int x){ int i; if (x%2 == 0) return x == 2; if (x%3 == 0) return x == 3; if (x%5 == 0) return x == 5; for (i = 7; i*i < x; i+= 2) if (x%i == 0) return 0; return 1;}void g(int x, int r... 阅读全文

posted @ 2012-08-21 11:07 getgoing 阅读(264) 评论(0) 推荐(0) 编辑

USACO sec1.5 Prime Palindromes

摘要: 素回文数,打表。。打表输出# include <math.h># include <time.h># include <stdio.h># define id(x) ((x)>>3)# define of(x) ((x)&0x7)# define get(x) ((pt[id(x)]>>of(x))&0x1)# define set(x) (pt[id(x)] |= (0x1<<(of(x))))# define MAXN 100000000char pt[(MAXN>>3) +1];void 阅读全文

posted @ 2012-08-21 10:50 getgoing 阅读(378) 评论(0) 推荐(0) 编辑

导航