摘要: Hash思想,因为题目要求第K大的数,可能很多人会想到先从小到大排序,然后找到第k个数。但是,注意,|xi - xj|可能会出想重复,也就是说排好序还得处理重复。Hash的大体思路是:将|xi - xj|作为一个hash数组的下标,如果hash[|xi - xj|]为空则hash[|xi - xj|]++;查找第k大时直接遍历一遍hash数组就行;代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 2007;int a[N/2]; 阅读全文
posted @ 2011-08-20 10:17 AC_Von 阅读(271) 评论(0) 推荐(1) 编辑
摘要: 一位ACMer过来人的心得(转载)刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练? 我想说下我的理解。 很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。 我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。 其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间, 我们训练的目的是什么?我觉得有四点 1、提高编程能力 2、学习算法,(读书,读论文,包括做一些题目验证) 3、准备好面临将到来的挑战(熟悉题型,调整心态) 4、启发思维。 这里四 阅读全文
posted @ 2011-08-20 09:45 AC_Von 阅读(500) 评论(0) 推荐(1) 编辑
摘要: 这两题的思路都是将等式化成左右两部分,用一个hash数组,先把左边的结果存起来,然后计算右边的结果直接寻址就行,不过,HDU那道题要注意剪枝,如果系数全为正或者全为负则直接输出0,POJ那道题hash函数定义成char型的,否则会超内存。。 HDU_1496 Equations:#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 2000009;int hash[N];int main(){ //freopen("data.i 阅读全文
posted @ 2011-08-20 09:03 AC_Von 阅读(201) 评论(0) 推荐(0) 编辑