poj2785(折半枚举)
来源:互联网 发布:如何看懂棒球打击数据 编辑:程序博客网 时间:2024/05/16 08:44
题意:给定各有n个整数的四个数列A,B,C,D。要从每个数列中各一个数,是的四个数的和为0.求出这样的组合的个数。
解法:折半,枚举A,B数列的两两组合,然后排序,再枚举C,D的两两组个,在A,B的组合中二分查找匹配数的个数。复杂度n^2logn.
代码:
/***************************************************** author:xiefubao*******************************************************/#pragma comment(linker, "/STACK:102400000,102400000")#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <vector>#include <algorithm>#include <cmath>#include <map>#include <set>#include <stack>#include <string.h>using namespace std;#define eps 1e-8typedef long long LL;int num1[4100];int num2[4100];int num3[4100];int num4[4100];int tool[16100000];int p=0;int main(){ int n; while(scanf("%d",&n)==1) { p=0; for(int i=0; i<n; i++) scanf("%d%d%d%d",num1+i,num2+i,num3+i,num4+i); for(int i=0; i<n; i++) for(int j=0; j<n; j++) tool[p++]=num1[i]+num2[j]; sort(tool,tool+p); LL ans=0; for(int i=0; i<n; i++) for(int j=0; j<n; j++) { int t=-(num3[i]+num4[j]); ans+=upper_bound(tool,tool+p,t)-lower_bound(tool,tool+p,t); } cout<<ans<<'\n'; } return 0;}/* */
0 0
- 折半枚举--poj2785
- poj2785(折半枚举)
- poj2785 折半枚举
- poj2785(折半枚举)
- POJ2785 (折半枚举)
- poj2785----折半枚举
- poj2785(二分折半枚举)
- poj2785 折半枚举 双向查找
- POJ2785 -- 4 Values whose Sum is 0(折半枚举)
- 《挑战程序设计竞赛》3.2.4 常用技巧-折半枚举 POJ2785 3977 2549
- POJ2785 4 Values whose Sum is 0(折半枚举+二分)
- 【折半枚举】
- 折半枚举
- 折半枚举
- poj2785
- poj2785
- POJ2785
- POJ2785-4 Values whose Sum is 0【折半搜索】
- HDU1018 (最小公倍数)
- zoj 3211 Dream City(DP)
- 图的深度优先搜索
- 嵌入式Linux中让应用程序自动启动
- 词项词典及倒排记录表
- poj2785(折半枚举)
- 【自动化测试技术QTP基础系列十一】---Action之间的参数传递
- spring 中 applicationEvent的使用
- spoj220 Relevant Phrases of Annihilation
- Word 中统一改变公式格式
- 谱密度,功率谱,能量谱密度
- 数据交换工具Kettle
- test
- Oracle的SGA