day2 POJ 2785 4 Values whose Sum is 0
2016-07-22 09:43
405 查看
#include"iostream" #include"algorithm" using namespace std; int n,k,l,r,mid,mm,sum=0; int a[4005],b[4005],c[4005],d[4005]; int p[4005*4005],q[4005*4005]; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]>>b[i]>>c[i]>>d[i]; k=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) p[k++]=a[i]+b[j]; k=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) q[k++]=c[i]+d[j]; sort(q,q+k); for(int i=0;i<k;i++) { l=0; r=k-1; while(l<=r) { mid=(l+r)/2; if(q[mid]==-p[i]) break; else if(q[mid]<-p[i]) l=mid+1; else r=mid-1; } if(q[mid]==-p[i]) { mm=mid; while(q[mm]==-p[i]&&mm>=0) {sum++; mm--;} mm=mid; while(q[mm]==-p[i]&&mm<k) {sum++; mm++;} sum--; } } cout<<sum<<endl; return 0; }
给四个数组要求Ax+Bx+Cx+Dx=0的组数,将AB求和,CD求和,排序CD,之后枚举AB二分查找CD即可,因为要求解组数,而CD中可能存在多个相同项,所以每当在CD中查找成功的时候向左右两个方向遍历CD,如果有相同值那么sum++,别忘了遍历后sum结果-1,因为mid值计算了两次。
相关文章推荐
- iOS 解决UICollectionView 计算 Cell 大小的问题
- iOS开发从入门到精通-- 滚动视图UIScrollView
- Some questions about RT-preempt
- confluent 版本比较 3.0.0 vs 2.0.0
- hdu-1242 Rescue DFS解法
- Android 6.0 通话UI设计模式分析(MVC\MVP\MVVM)
- Android编译系统详解(一)——build/envsetup.sh
- @RequestBody获取Json请求数据
- easyUI datagrid 取选中行id
- 文章标题POJ 2785:4 Values whose Sum is 0?(二分)
- Android官方开发文档Training系列课程中文版:管理系统UI之变暗系统条
- 秒懂设计模式(一): Builder模式
- 通讯录之手动型Segue和自动型Segue
- [leetcode] 375. Guess Number Higher or Lower II 解题报告
- Expression Tree Build
- LeetCode 376. Wiggle Subsequence(摇摆子序列)
- [leetcode] 376. Wiggle Subsequence 解题报告
- 解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题
- LeetCode 232. Implement Queue using Stacks
- LeetCode 62. Unique Paths