例题 8-2 和为0的4个值 UVa 1152
来源:互联网 发布:java软件开发工具 编辑:程序博客网 时间:2024/05/22 10:25
分析:现将集合AB中的元素求和保存起来,再将CD中的元素求和保存起来,然后再枚举看看两数组中是否存在相反数,在分别计算就可以了。按照书上说的分别将和保存在有序数组和map中,map果然超时了。
有序数组2379ms
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<map>#include<sstream>using namespace std;const int maxn=4005;int a[maxn],b[maxn],c[maxn],d[maxn];int num[maxn*maxn];int num2[maxn*maxn];int main(){ int T,n,p; cin>>T; while(T--){ cin>>n; for(int i=0;i<n;i++){ scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]); } int cnt=0,cnt2=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ num[cnt++]=a[i]+b[j]; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ num2[cnt2++]=c[i]+d[j]; } } int ans=0; sort(num,num+cnt); sort(num2,num2+cnt2); // int p=num[0]; for(int i=0;i<cnt;){ p=num[i]; int n1=upper_bound(num,num+cnt,p)-lower_bound(num,num+cnt,p); //由于这两个函数是二分写的,所以速度较快。 int n2=upper_bound(num2,num2+cnt2,-p)-lower_bound(num2,num2+cnt2,-p); ans+=n1*n2; i+=n1; } cout<<ans<<endl; if(T)printf("\n"); } return 0;}
用map超时代码:
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<map>#include<sstream>using namespace std;const int maxn=4005;int a[maxn],b[maxn],c[maxn],d[maxn];map<int,int>num;map<int,int>num2;map<int,int>::iterator it,i2;int main(){ int T,n; cin>>T; while(T--){ cin>>n; for(int i=0;i<n;i++){ scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]); } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ num[a[i]+b[j]]++; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ num2[c[i]+d[j]]++; } } int ans=0; for(it=num.begin();it!=num.end();it++){ int t=-(it->first),p=it->second; for(i2=num2.begin();i2!=num2.end();i2++){ if(i2->first==t){ ans+=p*i2->second; break; } } } cout<<ans<<endl; if(T)printf("\n"); } return 0;}
0 0
- 例题 8-2 和为0的4个值 UVa 1152
- 例题 8-3 UVA - 1152 4 Values whose Sum is 0(和为0的4个值)(二分枚举)
- 例题8-3 和为0的4个值(4 Values Whose Sum is Zero, ACM/ICPC SWERC 2005, UVa 1152)
- 例题8-3 和为0的4个值 UVa1152
- 例题8-3:和为0的4个值(中途相遇法)
- uva 1152 和为0的4个值
- 和为0的4个值(4 Values Whose sum is Zero UVa 1152)
- Uva 1152 和为0的4个值 hash/二分
- 《算法竞赛》第二版 237页 uva 1152 和为0的4个值
- uva 1152 和为0的4个值(中途相遇法)
- 中途相遇法,哈希技术(和为0的4个值,uva 1152)
- 例题:安迪的第一个字典(UVa 10815)
- uva 12169 不爽的裁判 例题2
- [UVa 1152] 和为0的四个值(4 Values whose Sum is 0)
- UVa #1152 4 Values whose Sum is 0 (例题8-3)
- UVa #11134 Fabled Rooks (例题8-4)
- 例题8-2 联合国大楼 UVa 1605
- 例题4-2 uva 489 - Hangman Judge
- bestcoder+置换群组成的各自环后减一累加
- HDOJ 5366 The mook jong(规律)
- Linux编程学习之路_1
- PHP
- HttpURLConnection的get和post处理方法(含图片)
- 例题 8-2 和为0的4个值 UVa 1152
- 让Ubuntu更多的使用物理内存
- 浮点型JAVA008
- 【Scala学习笔记】1. Hello Scala
- c++ vector实验
- 二维码扫描-zbar的使用
- 【java】面向对象综述
- Web_JavaScript_JS循环滚动效果;
- Ruby中的字符串与符号