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 ...
随机推荐
- spring 注释
4
- python 使用[[v]*n]*m遇到的问题
需求:想通过python生成m行n列的矩阵 方式1:(有问题) data = [[0]*3]*4 #4行3列 data 输出 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, ...
- 怎么追加byte内容
public byte[] InsertByte(string dx) { List<byte> temp = new List<byte>(); byte[] b= Enco ...
- Git的安装配置
Git是什么 Git是一款免费.开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 与常用的版本控制工具CVS.Subversion等不同的是它采用了分布式版本库的方式,不必 ...
- Scrapy框架: 异常错误处理
import scrapy from scrapy.spidermiddlewares.httperror import HttpError from twisted.internet.error i ...
- pixi与lottie-web的benchmark测试
生产版本 "dependencies": { "lottie-web": "^5.5.7", "pixi-spin ...
- Charles 抓 HTTPS 包
最新 Charles 破解版下载地址:http://charles.iiilab.com/ 关掉翻墙软件!!!!! 重启 Charles !!!!! 重启浏览器!!!!! 如果是抓手机的HTTPS包, ...
- Yii 1.1 cookie删不掉
我的cookie是这样设置的: $cookie = new CHttpCookie('username','Jack'); $cookie->expire = time()+60*60*24*3 ...
- elasticsearch 英文数字组合字符串模糊检索
不分词,然后用wildcard查询 { "query": { "wildcard": { "字段名": "*123*" ...
- django中动态生成二级菜单
一.动态显示二级菜单 1.修改权限表结构 (1)分析需求,要求左侧菜单如下显示: 客户管理: 客户列表 账单管理: 账单列表 (2)修改rbac下的models.py,修改后代码如下: from dj ...