UVA1152_4 Values whose Sum is 0
中途相遇法,这题目总结后我感觉和第一篇博客很像,他们都取了中间,也许这就是二分的魅力吧
这题题意就是从ABCD四个集合中选四个元素使他们的和为0
题意很简单,但是实现起来很容易超时,不能一个一个枚举
然后就想到了枚举两个,那么新生成EF两个集合大小为n方,然后如何查找?
最容易想到的就是用map标记,但汝佳说了这会超时,我不信,试了一发,超时了!!!
除了用map还能用什么呢,联想到之前那个UVA对称的题目,我们可以sort一下,然后查找e的相反数时候,二分查找-e,记住,找到还不行,有可能存在多个-e.所以upper_bound-lower_bound 就可以了,然后就这样过了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector>
using namespace std;
int t,n,a,b,c,d,kase,cnt;
int num[4][4040],sum1[16000040],sum2[16000040];
map<int,int> list;
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
kase=0;
cin>>t;
while(t--){
memset(num,0,sizeof num);
memset(sum1,0,sizeof sum1);
memset(sum2,0,sizeof sum2);
cnt=0;
if(kase++) cout<<"\n";
cin>>n;
for(int i=0;i<n;i++)
scanf("%d%d%d%d",&num[0][i],&num[1][i],&num[2][i],&num[3][i]);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
sum1[i*n+j]=num[0][i]+num[1][j];
sum1[i*n+j]=-sum1[i*n+j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
sum2[i*n+j]=num[2][i]+num[3][j]; }
}
sort(sum1,sum1+n*n);
sort(sum2,sum2+n*n);
int end=n*n,pos1=0,pos2=0;
for(int i=0;i<end;i++){
pos1 = lower_bound(sum2+pos1,sum2+end,sum1[i]) -sum2;
pos2 = upper_bound(sum2+pos1,sum2+end,sum1[i]) -sum2;
if(pos1==end) break;
cnt+=pos2-pos1;
pos1=max(pos1-1,0);
}
cout<<cnt<<endl;
}
return 0;
}
UVA1152_4 Values whose Sum is 0的更多相关文章
- POJ 2785 4 Values whose Sum is 0(想法题)
传送门 4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 20334 A ...
- POJ 2785 4 Values whose Sum is 0
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 13069 Accep ...
- 哈希-4 Values whose Sum is 0 分类: POJ 哈希 2015-08-07 09:51 3人阅读 评论(0) 收藏
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 17875 Accepted: ...
- [poj2785]4 Values whose Sum is 0(hash或二分)
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 19322 Accepted: ...
- K - 4 Values whose Sum is 0(中途相遇法)
K - 4 Values whose Sum is 0 Crawling in process... Crawling failed Time Limit:9000MS Memory Limi ...
- UVA 1152 4 Values whose Sum is 0 (枚举+中途相遇法)(+Java版)(Java手撕快排+二分)
4 Values whose Sum is 0 题目链接:https://cn.vjudge.net/problem/UVA-1152 ——每天在线,欢迎留言谈论. 题目大意: 给定4个n(1< ...
- UVA1152-4 Values whose Sum is 0(分块)
Problem UVA1152-4 Values whose Sum is 0 Accept: 794 Submit: 10087Time Limit: 9000 mSec Problem Desc ...
- POJ - 2785 4 Values whose Sum is 0 二分
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 25615 Accep ...
- POJ 2785 4 Values whose Sum is 0(折半枚举+二分)
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 25675 Accep ...
随机推荐
- JS 获取json key和value
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...
- Windows Server 2008 R2 官方简体中文免费企业版/标准版/数据中心版
Windows Server 2008 R2是一款微软发布的Windows服务器操作系统,和之前发布的Windows Server 2008相比功能更为完善运行更为稳定,提升了系统管理弹性.虚拟化.网 ...
- PHPStorm remoteHost链接FTP成功,但不显示文件目录
============================================== 勾上前两个选项就可以了
- matplotlib系列——折线图
import numpy as np import matplotlib.pyplot as plt import matplotlib #数据准备 #numpy.linspace(start, st ...
- Java-技术专区-异步编程指南
通过本文你可以了解到下面这些知识点: Future 模式介绍以及核心思想 核心线程数.最大线程数的区别,队列容量代表什么: ThreadPoolTaskExecutor 饱和策略: SpringBoo ...
- 使用批处理发布 QT 的程序
1. 将 QT Creator 生成的 exe 文件拷贝到一个目录中 :C:\Users\zyy\Desktop\qtrelease 2.新建 bat 文件:qt.bat . 编辑文件,注意替换 QT ...
- DB2临时表空间的作用
临时表空间分为系统临时表空间和用户临时表空间 系统临时表空间用来存储各种数据操作(排序.重组表.创建索引.连接表)中所需的内部临时数据,虽然可以创建任意多个系统临时表空间,但建议用户只使用大多数表所使 ...
- spring整合mybatis后,mybatis一级缓存失效的原因
一般来说,可以在5个方面进行缓存的设计: 最底层可以配置的是数据库自带的query cache, mybatis的一级缓存,默认情况下都处于开启状态,只能使用自带的PerpetualCache,无法配 ...
- Anaconda基本命令
创建环境 conda create --name bunnies python=3 astroid babel 列出所有环境 conda info --envs 或 conda env list 克隆 ...
- 牛客挑战赛33 F 淳平的形态形成场(无向图计数,EGF,多项式求逆)
传送门: 淳平的形态形成场 题解: 把a排序后,直接统计答案恰好为a[i]并不好做,可以统计答案>a[i]的方案数,设为\(f[i]\). 即不存在一个联通块,所有的权值都<=a[i]. ...