poj2549 3sum/二分查找
来源:互联网 发布:引导页源码 编辑:程序博客网 时间:2024/06/08 00:35
由此题目了解到有一个3sum算法,自己又将a+b存起来用二分查找AC了,不过3sum的时间复杂度高些但耗时反倒少些。。。。
ACcode:
/**3sum O(n^3)*/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1005;bool flag;int n, d, num, s[MAXN];int main(){ while (~scanf("%d",&n),n) { num=1,flag=true; for (int i=0;i<n;i++) scanf("%d",s+i); sort(s,s+n); for (int i=1;i<n;i++) if (s[i]!=s[i-1]) s[num++]=s[i]; n=num; for (d=n-1;d>=0&&flag;--d) { for (int i=0;i<n-3&&flag;i++) { int j=i+1,k=n-1; while (j<k) { long long t=s[i]+s[j]+s[k]; if (t==s[d]) { if (i==d||j==d||k==d) break; flag=false; n=t; break; } else if (t>s[d]) k--; else j++; } } } if (flag) printf("no solution\n"); else printf("%d\n",n); } return 0;}
/**二分查找O(n^2*log(n))*/#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int nsize=1111;struct ad{ int a,b,s; ad(){}; ad(int x,int y,int z) { a=x,b=y,s=z; }}t[nsize*1000];int n,k,d,c[nsize],top;bool cmp(ad a1,ad a2){ if (a1.s==a2.s) return a1.a<a2.a; return a1.s<a2.s;}int Fin(int x,int y){ int low=0,high=top-1; while (low<=high) { int mid=(low+high)>>1; if (t[mid].s==x) { if (y==t[mid].a||y==t[mid].b) { if (mid>0&&t[mid-1].s==x) return 1; if (mid<top-1&&t[mid+1].s==x) return 1; return 0; } else return 1; } else if (t[mid].s>x) high=mid-1; else low=mid+1; } return 0;}int main(){ while (~scanf("%d",&n),n) { for (int i=0;i<n;i++) scanf("%d",&c[i]); sort(c,c+n); k=1,top=0; for (int i=1;i<n;i++) if (c[i]!=c[i-1]) c[k++]=c[i]; n=k; for (int i=0;i<n;i++) { for (int j=i+1;j<n;j++) { t[top++]=ad(c[i],c[j],c[i]+c[j]); } } sort(t,t+top,cmp); bool flag=true; for (int i=n-1;i>=0&&flag;i--) { for (int j=i-1;j>=0&&flag;j--) { d=c[i],k=c[j]; if (Fin(d-k,k)&&Fin(d-k,d)) { flag=false; printf("%d\n",d); } } } if (flag) printf("no solution\n"); } return 0;}
- poj2549 3sum/二分查找
- 折半枚举+3SUM--poj2549
- poj2549 枚举+二分
- poj2549
- poj2549
- poj2549
- 【二分查找】[POJ2366]Sacrament of the sum
- 3_11_二分查找
- 8.2.3(二分查找)
- POJ 2366 Sacrament of the sum(二分查找)
- HDU 3280 Equal Sum Partitions(二分查找)
- NOJ——1649Find Sum(二分查找)
- Poj 2785 4 Values whose Sum is 0【二分查找】
- Values whose Sum is 0 (二分查找)
- POJ - 2366 Sacrament of the sum 二分查找
- Split Array Largest Sum 二分查找应用 C实现
- UVALive 35064 Values whose Sum is 0 (二分查找)
- POJ2785 4 Values whose Sum is 0(暴力二分查找)
- Java中Split函数的用法技巧
- oracle主键自增与序列的关系
- double 型浮点数能精确到多少位小数
- hdu2836
- NSInvalidUnarchiveOperationException: Could not instantiate class named NSLayoutConstraint
- poj2549 3sum/二分查找
- java finalize 方法引发的内存泄露
- 第2堂作业
- uva 10881 - Piotr's Ants
- kmalloc, vmalloc分配的内存结构
- Android Layout XML属性
- 嵌入式Linuxwebserver:Boa+CGI程序设计技术
- 利用Spring框架封装的JavaMail现实同步或异步邮件发送
- 运算符