摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2530题意:求一个数组中是否存在三个数的和为0。n=1000,朴素的n^3会超时,故用二分搜索,即是把正负数存入不同的两个数组,在一个数组中任取两个,求和,然后在另一个数组中利用二分查找其相反数是否存在, 复杂度将降为n^2logn 级别 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 bool b_
阅读全文
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2859简单dfs。但花了比较大的精力去处理不添加符号的情况,求出所有的情况复杂度大概是8*3^8,最后用map匹配完成dfs遍历时存下添加符号的方法,到最终再计算处理会比较清晰。用hash可能更快。 1 #include<map> 2 #include<cmath> 3 #include<queue> 4 #include<cctype> 5 #include<cstdio> 6 #include<string> 7 #inc
阅读全文
摘要:poj 2785 http://poj.org/problem?id=2785eoj 1046 http://acm.cs.ecnu.edu.cn/problem.php?problemid=1046 思路: 散列(hash) + 拉链法去冲突; 具体过程: 把num[][1-4]按列划分为num[][1-2] 和 num[][3-4]; 对 MAXN + num[i][1] + num[j][2] 散列;O(n^2 * len) 对 MAXN - num[i][3] - num[j][4] 查找;O(n^2 * len) 须使得被散列值为正,故用一大数 MAXN 保护;len为链表平均...
阅读全文