博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2785 4 Values whose Sum is 0 (二分)题解
阅读量:6435 次
发布时间:2019-06-23

本文共 857 字,大约阅读时间需要 2 分钟。

思路:

如果用朴素的方法算O(n^4)超时,这里用折半二分。把数组分成两块,分别计算前后两个的和,然后枚举第一个再二分查找第二个中是否有满足和为0的数。

注意和有重复

#include
#include
#include
#define ll long longusing namespace std;const int N = 4000+5;int a[N],b[N],c[N],d[N];int mp1[N*N],mp2[N*N],cn1,cn2;int main(){ int n; scanf("%d",&n); for(int i = 1;i <= n;i++) scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]); cn1 = cn2 = 0; for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ mp1[cn1++] = a[i] + b[j]; mp2[cn2++] = c[i] + d[j]; } } sort(mp2,mp2+cn2); ll ans = 0; for(int i = 0;i < cn1;i++){ int x = lower_bound(mp2,mp2+cn2,-mp1[i]) - mp2; if(mp1[i] + mp2[x] == 0) ans += upper_bound(mp2,mp2+cn2,-mp1[i]) - mp2 - x; } printf("%lld\n",ans); return 0;}

转载于:https://www.cnblogs.com/KirinSB/p/9408794.html

你可能感兴趣的文章
php token验证范例
查看>>
WebSocket的C++服务器端实现
查看>>
java中两种添加监听器的策略
查看>>
脑洞成现实!AI系统可提前10s预测地震
查看>>
Page页面生命周期——微信小程序
查看>>
Node.js编写CLI的实践
查看>>
Javascript数组对象的方法和属性
查看>>
TiDB 3.0.0 Beta.1 Release Notes
查看>>
oracle数据库的启动和停止
查看>>
《LoadRunner没有告诉你的》之七——使用 LoadRunner 连续长时间执行测试,如何保证参数化的数据足够又不会重复?...
查看>>
python easy_install django 安装
查看>>
读《图解HTTP》总结--第六章
查看>>
毕业就能拿到上万薪资的程序员他们都做了啥?
查看>>
最小的k个数
查看>>
Spring cloud Eureka(注册服务中心)
查看>>
FWSM-no connection SYN ACK
查看>>
wince c# 程序只能运行一次
查看>>
我的友情链接
查看>>
一些Mac OS X 10.9.3 4K的使用感受
查看>>
C#在代码中演示值传递和引用传递的含义,区别
查看>>