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

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

问题分析

首先枚举a和b, 把所有a+b记录下来放在一个有序数组,然后枚举c和d, 在有序数组中查一查-c-d共有多少个。注意这里不可以直接用二分算法的那个模板,因为那个模板只能查找是否有某个数,一旦找到便退出。利用比较方便,这两个函数就是用二分实现的,二者之差就是相等的那部分。

代码

#include
using namespace std;typedef long long LL;LL T, n;const int maxn = 4000 + 10;LL a[maxn], b[maxn], c[maxn], d[maxn];LL s1[maxn*maxn];int cnt, ans;int main(){ std::ios::sync_with_stdio(false); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); cin >> T; for(LL t = 1; t <= T; t++) { cnt = 0, ans = 0; if(t != 1) cout << endl; cin >> n; for(LL i = 0; i < n; i++) cin >> a[i] >> b[i] >> c[i] >> d[i]; memset(s1, 0, sizeof(s1)); for(LL i = 0; i < n; i++) for(LL j = 0; j < n; j++) { s1[cnt] = a[i] + b[j]; cnt++; } sort(s1, s1 + cnt); for(LL i = 0; i < n; i++) { for(LL j = 0; j < n; j++) { ans += upper_bound(s1, s1 + cnt, -(c[i] + d[j])) - lower_bound(s1, s1 + cnt, -(c[i] + d[j])); } } cout << ans << endl; }}

转载于:https://www.cnblogs.com/KeepZ/p/11349202.html

你可能感兴趣的文章
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>
JSP常用标签
查看>>
dashucoding记录2019.6.7
查看>>
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
页面懒加载
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>