uva 1152 二分查找+中途相遇法
来源:互联网 发布:处理器加速优化 编辑:程序博客网 时间:2024/05/29 15:08
题意:
给定4个n元素集合,要求分别从中选取一个元素a,b,c,d使得a+b+c+d=0.问,有多少种说法?
题解:
根据紫书算法,我们计算出a+b的所有和,放入vector数组中,同时计算c+d的所有和,放入vector数组中,之后暴力枚举a+b的所有和,在c+d和数组中二分查找-(a+b),这里需要注意的是原始的二分查找只会找到一个数据,数组中可能会有多个-(a+b),我们需要判断。PE了好几次,uva了格式很严格!
代码:
#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef long long LL;vector<LL> sumA,sumB;int solve(int mid,LL ans){ //cout<<mid<<ans<<endl; int count=0; int i=mid+1; int j=mid-1; while(sumB[i]==ans) { count++; i++; } while(sumB[j]==ans) { count++; j--; } return count;}int main(){ vector<LL> data[4]; int T; cin>>T; LL num,tmp; while(T--) { cin>>num; for(int i=0;i<num;i++) { for(int j=0;j<4;j++) { cin>>tmp; data[j].push_back(tmp); } } LL sum1,sum2; for(int i=0;i<num;i++) { for(int j=0;j<num;j++) { sum1 = data[0][i]+data[1][j]; sum2 = data[2][i]+data[3][j]; sumA.push_back(sum1); sumB.push_back(sum2); } } LL sizA = sumA.size(); LL sizB = sumB.size(); int ans=0; sort(sumB.begin(),sumB.end()); for(int i=0;i<sizA;i++) { LL se = -sumA[i]; int right=sizB-1; int left =0; while(right>=left) { int mid = (right+left)>>1; if(sumB[mid]>se){ right=mid-1; } else if(sumB[mid]<se) { left=mid+1; } else if(sumB[mid]==se){ //cout<<sumB[mid]<<se<<endl; ans++; int o=solve(mid,se); ans+=o; break; } } } cout<<ans<<endl; if(T!=0) cout<<endl; sumA.clear(); sumB.clear(); for(int j=0;j<4;j++) { data[j].clear(); } } return 0;}
阅读全文
0 0
- uva 1152 二分查找+中途相遇法
- UVA 1152 4 Values whose Sum is 0 中途相遇法 二分查找
- uva 1326 Jurassic Remains(中途相遇法)
- Uva 1326 - Jurassic Remains 中途相遇法
- UVa 10125 - Sumsets (中途相遇法 hash)
- UVA - 1326 (中途相遇法 + 统计奇偶)
- UVA 1326 Jurassic Remains 中途相遇法
- UVA 10125 Sumsets(中途相遇法)
- UVa 10125 Sumsets (中途相遇法)
- uva 1608(分治 + 中途相遇法)
- uva 1152 4 Values whose Sum is 0(二分_中途相遇|| hash)
- uva10125 (中途相遇法)
- 中途相遇法
- uva 1152 和为0的4个值(中途相遇法)
- 中途相遇法,哈希技术(和为0的4个值,uva 1152)
- UVA 1152 --4 Values whose Sum is 0(枚举--中途相遇法)
- Uva1152 查找优化的四种方法 中途相遇法
- Uva 10125 Sumsets(中途相遇法,高效枚举)
- HDU 1495 非常可乐(BFS||数论)
- Linux unzip命令
- Dockerfile使用说明
- hdu6047--Maximum Sequence
- codeForces 472D 最小生成树
- uva 1152 二分查找+中途相遇法
- 使用CleanMymac清理电脑安全吗?
- jQuery实现年月日的联动功能
- 【AtCoder】 Grand Contest 018 C
- centos php添加pgsql扩展
- truffle webpack下localhost能够访问,而IP地址无法访问的解决方法
- linux系统下实现文件拷贝
- 阿里巴巴智能操作系统YunOS 6 系统发布
- 详解 Redis 应用场景及应用实例