poj2785
来源:互联网 发布:最好企业网络投资理财 编辑:程序博客网 时间:2024/04/30 08:29
二分法
#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int s[4002][4],x[4000*4000],y[4000*4000];int bin(int key,int b[],int n);int main(){int n,i,j;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<4;j++)scanf("%d",&s[i][j]);int cnt1=0,cnt2=0;for(i=0;i<n;i++){for(j=0;j<n;j++){ x[cnt1++]=s[i][0]+s[j][1]; y[cnt2++]=s[i][2]+s[j][3];}}sort(y,y+cnt2);int sum=0;for(i=0;i<cnt1;i++){sum+=bin(-x[i],y,n*n);}printf("%d\n",sum);return 0;}int bin(int key,int b[],int n){int low=0,high=n-1,mid,ans=0;while(low<=high){mid=(low+high)>>1;if(key==b[mid]){/*ans++;int t=mid;while(t>0&&key==b[--t]) ans++;while(mid<n-1&&key==b[++mid]) ans++;*///用此方法TLEfor(ans=0;low<n;low++){if(b[low]==key)ans++;else if(ans!=0&&b[low]!=key) break;}}else if(key>b[mid])low=mid+1;else high=mid-1;}return ans;}
也可用hash链地址法处理,每个不同的值都作为一个边节点,hash地址相同的值连成链
#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int s[4002][4];struct node{int v,num,next;}edge[3999971];int hh[3999971];//哈希表int hash(int m){return (m+3899971)%3999971;}int tot=0;void add_edge(int m){int s=hash(m);//得到哈希地址for(int i=hh[s];i!=-1;i=edge[i].next){if(edge[i].v==m){edge[i].num++;return;}}edge[tot].v=m;edge[tot].num=1;edge[tot].next=hh[s];//通过链连接处理冲突,指向上一个链编号hh[s]=tot++;//hh[]存储当前链的编号}int find1(int m){int s=hash(m);for(int i=hh[s];i!=-1;i=edge[i].next){if(edge[i].v==m)return edge[i].num;}return 0;}int main(){int n,i,j;scanf("%d",&n);memset(hh,-1,sizeof(hh));for(i=0;i<n;i++)for(j=0;j<4;j++)scanf("%d",&s[i][j]);for(i=0;i<n;i++)for(j=0;j<n;j++)add_edge(s[i][0]+s[j][1]);long ans=0;for(i=0;i<n;i++)for(j=0;j<n;j++)ans+=find1(-s[i][2]-s[j][3]);cout<<ans<<endl;return 0;}
0 0
- poj2785
- poj2785
- POJ2785
- (哈希)POJ2785
- poj2785题解
- POJ2785 ——哈希
- 折半枚举--poj2785
- poj2785(折半枚举)
- poj2785 折半枚举
- poj2785(折半枚举)
- POJ2785 (折半枚举)
- poj2785----折半枚举
- poj2785(二分折半枚举)
- poj2785 折半枚举 双向查找
- POJ2785 4 Values whose Sum is 0
- POJ2785 4 Values whose Sum is 0
- poj2785(4 Values whose Sum is 0)
- POJ2785-4 Values whose Sum is 0
- 树莓派3安装ROS(机器人操作系统)
- 第一次打字成绩
- xampp下mysql初始密码的修改
- 【C/C++】深入预处理之line
- Gradle详解-Chapter 4. Using the Gradle Command-Line
- poj2785
- JAVA的IO操作(二)
- Linux 工具-------搜狗输入法for linux
- Spring环境搭建
- 动态事件绑定
- dm6446 初始化流程
- frontend http 前端名字定义问题
- Android service(四)Intent服务
- R语言实战:机器学习与数据分析源代码6(最终弹)