(UVA - 11524) Values whose Sum is 0(二分+枚举)
2017-08-13 15:57
531 查看
链接: https://vjudge.net/problem/UVA-1152
分析:最简单粗暴的方法 4个循环,但是一定TLE,然后a,b分别相加再枚举,复杂度降低了,和二分结合,时间复杂度降为O(n^2log(n))
分析:最简单粗暴的方法 4个循环,但是一定TLE,然后a,b分别相加再枚举,复杂度降低了,和二分结合,时间复杂度降为O(n^2log(n))
#include<cstdio> #include<set> #include<cstring> #include<sstream> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define mem(a,n) memset(a,n,sizeof(a)) typedef long long LL; const int N=4e4+5; const int INF=0x3f3f3f3f; #define same(x,y) Find(x)==Find(y) LL a ,b ,c ,d ,f[4005*4005];///f数组代表ai和bi相加组合的后的数,数组不能是表达式 int main() { int t; scanf("%d",&t); while(t--) { LL n,cnt=0; scanf("%lld",&n); for(LL i=0; i<n; i++) scanf("%lld%lld%lld%lld",&a[i],&b[i],&c[i],&d[i]); for(LL i=0; i<n; i++) for(LL j=0; j<n; j++) f[cnt++]=a[i]+b[j]; sort(f,f+cnt); LL ans=0; for(LL i=0; i<n; i++) for(LL j=0; j<n; j++) ans+=(upper_bound(f,f+cnt,-c[i]-d[j])-f-(lower_bound(f,f+cnt,-c[i]-d[j])-f)); printf("%lld\n",ans); if(t) printf("\n"); } return 0; }
相关文章推荐
- 例题 8-3 UVA - 1152 4 Values whose Sum is 0(和为0的4个值)(二分枚举)
- UVA 1152 4 Values whose Sum is 0 (枚举+中途相遇法)(+Java版)(Java手撕快排+二分)
- uva1152 - 4 Values whose Sum is 0(枚举,中途相遇法)
- UVA-1152 4 Values whose Sum is 0 (二分)
- POJ2785 4 Values whose Sum is 0(折半枚举+二分)
- UVa1152 4 Values whose Sum is 0 (中途相遇法+二分)
- POJ-2785 4 Values whose Sum is 0(折半枚举 sort + 二分)
- UVA - 1152 4 Values whose Sum is 0(hash || 二分)
- UVA - 1152 4 Values whose Sum is 0问题分解,二分查找
- UVA 1152 --4 Values whose Sum is 0(枚举--中途相遇法)
- POJ - 2785 4 Values whose Sum is 0(二分枚举)
- UVA 1152 4 Values whose Sum is 0 (二分)
- poj 2785 4 Values whose Sum is 0 (二分+枚举)
- UVALive - 3506 4 Values whose Sum is 0 二分
- 【折半枚举 && 二分】POJ - 2785 4 Values whose Sum is 0
- UVA 1152 4 Values whose Sum is 0 中途相遇法 二分查找
- uva 1152 4 Values whose Sum is 0(二分_中途相遇|| hash)
- UVa 1152 4 Values whose Sum is 0——二分
- POJ 2785 4 Values whose Sum is 0(二分+折半枚举)
- Uva1152 4 Values whose Sum is 0 【中途相遇+二分】【例题8-3】