poj2785 二分查找
输入n,表示a b c d 四个集合都有n个元素。之后每行输入4个集合中的一个元素。求这四个集合每个集合中拿出一个数相加等于0的组数。
思路
如果直接搜,复杂度为O(N^3),时间不满足要求。
折半搜索比较适合,把4个数字分成两份,分别两两求和,得到两个长度n*n的一维数组,排序后比较进行匹配即可。
另外这个题还可以用hash,具体参考:POJ2785 4 Values whose Sum is 0(哈希)
代码
Source CodeProblem: 2785 User: liangrx06 Memory: 49276K Time: 7016MS Language: C++ Result: Accepted Source Code #include <iostream> #include <cstdio> #include <algorithm> using namespace std;const int N = 4000;int n, m; int a[4][N]; int x[N*N], y[N*N];int main(void) {cin >> n;m = n*n;for (int i = 0; i < n; i ++)for (int j = 0; j < 4; j ++)scanf("%d", &a[j][i]);for (int i = 0; i < n; i ++)for (int j = 0; j < n; j ++)x[i*n+j] = a[0][i] + a[1][j];for (int i = 0; i < n; i ++)for (int j = 0; j < n; j ++)y[i*n+j] = a[2][i] + a[3][j];sort(y, y+m);long long ans = 0;for (int i = 0; i < m; i ++)ans += (upper_bound(y, y+m, -x[i]) - lower_bound(y, y+m, -x[i]));printf("%lld\n", ans);return 0;
}
两两一组进行查询。
这里注意两个函数upper_bound和 lower_bound分别是第一次出现和最后一次出现的位置。两者相减就是一共的个数。
poj2785 二分查找相关推荐
- poj2785 二分查找
题目大意:给定n行数(n<=4000),每行4个数.从这4列中,每列选择一个数使其和为0 暴力枚举 O(n^4)会tle. 优化:枚举第1,2列算出总和s1[],枚举第3,4列算出总和s2[]. ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
- 二分查找模板全面总结
二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...
- 二分法:二分查找(递归+非递归)实现
二分查找又称折半查找,首先,假设表中元素是按升序排列,将 表中间位置的关键字与查找关键字比较: 如果两者相等,则查找成功; 否则利用中间位置将表分成前.后两个子表: 1)如果中间位置的关键字大于查找关 ...
- python数据结构与算法:二分查找
二分查找:python 实现 def binary_seaech(alist,item):"""二分查找 递归实现"""n = len(al ...
- 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...
最新文章
- 什么决定了电商双11大促的成败
- 计算机c盘隐藏了怎么办,win7怎么隐藏c盘 win7c盘被隐藏了怎么解除
- JavaScript重难点解析4(作用域与作用域链、闭包详解)
- OracleXE安装完成后 http://127.0.0.1:8080/apex 总是在刷新无法打开
- Java 字符串格式化 String.format()
- 自定义Dialog的小实战——根据地区选择手机号码前缀
- 解决Unity中文显示乱码问题
- 8.10.3 熊猫分布密度制图
- Python 各种画图
- git push you are not allowed to upload merges
- 第2章 构建自定义语料库
- linux 误删文件恢复
- JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
- HTML 动态背景
- 线性回归 | Kaggle案例 预期寿命影响预期寿命的因素的统计分析(基于torch)
- 能被9和11整除的数的特征
- html2Canvas 边框虚线
- FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'D:/tjn/tra
- SQL Server搭配SSMS基础操作
- 淮北师范大学的计算机类怎么分专业,2018淮北师范大学专业排名及分数线 王牌专业有哪些...
热门文章
- 如何用一个U盘中装多个iso安装镜像包让一个U盘当N个启动盘,用U盘做一个虚拟光驱可以选择ISO载入到虚拟光驱,多系统启动U盘解决方案
- 数据采集中间件技术对比V1.0
- 数据分析面试经验(给自己一个梳理的过程)
- 精华分享,《这样读书就够了》让知识为你所用
- postfix端口修改linux下发送email的smtp端口unbuntu
- 2021-07-19 织梦仿站篇_织梦标签生成器讲解
- 计算机课逃一节,最想逃的课_厦门工学院
- 永磁同步电机(PMSM)控制中为什么要Id=0?还有其他的控制方法吗?
- 【经验整理.01】Xilinx网站资源导读 ISE11版
- 复制 PDF 时去掉换行符