Trouble(多校联合)
来源:互联网 发布:中国网络电视全球直播 编辑:程序博客网 时间:2024/05/22 03:37
/* 简单来说题目意思就是这样子了:a+b+c+d+e=0 */ 点击打开链接
hash 版:3116ms
#include < iostream >#include < cstdio >#include < algorithm>#define N 220#define inf 500005typedef __int64 LL;using namespace std;LL a[5][N] , b[N*N];struct HASH{LL v;bool f;}h[inf];int hash(LL val){int p=val % inf;if(p < 0) p+=inf;while(h[p].f && h[p].v!=val) p=(p+1)%inf;return p;}int main (){//freopen("t.txt","r",stdin);LL n,t,i,j,k,te;for(scanf("%I64d",&t),k=0;k<t;k++){scanf("%I64d",&n);int mt,p,flag=0;memset(h,0,sizeof(h));memset(b,0,sizeof(b));for(i=0 ; i<5 ; i++)for(j=0 ; j<n ; j++)scanf("%I64d",&a[i][j]);for(mt=i=0;i<n;i++){a[4][i]=0-a[4][i];for(j=0;j<n;j++) {p=hash(a[0][i]+a[1][j]);h[p].f = 1 ; h[p].v =a[0][i]+a[1][j];b[mt++]=a[2][i]+a[3][j];}}for(i=0 ; i<n ; i++){for(j=0 ; j<mt ;j++){te=a[4][i]-b[j];p = hash( te );if(h[p].f) {flag=1;break;}}if( flag ) break;}if(flag) puts("Yes");else puts( "No");}return 0;}
夹逼版:1156ms
#include < iostream >#include < cstdio >#include < algorithm>#define N 220typedef __int64 LL;using namespace std;LL a[5][N],b[2][N*N];int main (){//freopen("t.txt","r",stdin);LL n,t,i,j,k;for(scanf("%I64d",&t),k=0;k<t;k++){scanf("%I64d",&n);int mt,nt,f=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(i=0 ; i<5 ; i++)for(j=0 ; j<n ; j++)scanf("%I64d",&a[i][j]);for(nt=mt=i=0;i<n;i++){a[4][i]=0-a[4][i];for(j=0;j<n;j++) {b[0][nt++]=a[0][i]+a[1][j];b[1][mt++]=a[2][i]+a[3][j];}}sort(b[0],b[0]+nt);sort(b[1],b[1]+mt);for(i=0 ; i<n ; i++){int b1=0,b2=mt-1;while(b1<nt && b2>-1){if( f ) break;if(b[0][b1]+b[1][b2]==a[4][i]) f=1;else if(b[0][b1]+b[1][b2]<a[4][i]) b1++;else b2--;}if( f ) break;}if(f) puts("Yes");else puts( "No");}return 0;}
超内存版:
#include < iostream >#include < cstdio >#include < map >#define N 205typedef __int64 LL;using namespace std;map <LL , LL> m;LL a[5][N],b[2][N*N];int main (){ //freopen("t.txt","r",stdin); LL n,t,i,j,l,k; for(scanf("%I64d",&t),k=0;k<t;k++) { m.clear(); scanf("%I64d",&n); int mt,nt; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(i=0 ; i<5 ; i++) for(j=0 ; j<n ; j++) scanf("%I64d",&a[i][j]); for(nt=mt=i=0;i<n;i++) for(j=0;j<n;j++) m[a[0][i]+a[1][j]]=1;bool f=0; for(i=0 ; i<n ;i++) { for(j=0 ; j<n ; j++) for(l=0 ; l<n ;l++) if(m[a[2][i]+a[3][j]+a[4][l]]==1) { f=1;break;} if( f ) break;if( f ) break; } if(f) puts("Yes"); else puts( "No"); } return 0;}
二分超时版:
#include < iostream >#include < cstdio >#include < map >#include < algorithm>#define N 220typedef __int64 LL;using namespace std;LL a[5][N],b[2][N*N];map <LL , LL> m[2];map <LL , LL>::iterator it;int find(LL x,LL y,int r,int l){while(r<=l){int mid=(r+l)/2;if(x==y+b[1][mid]) return 1;else if(x<y+b[1][mid]) l=mid-1;else r=mid+1;}return 0;}int main (){//freopen("t.txt","r",stdin);LL n,t,i,j,k;for(scanf("%I64d",&t),k=0;k<t;k++){scanf("%I64d",&n);int mt,nt,f=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));m[0].clear();m[1].clear();for(i=0 ; i<5 ; i++)for(j=0 ; j<n ; j++)scanf("%I64d",&a[i][j]);for(nt=mt=i=0;i<n;i++){a[4][i]=0-a[4][i];for(j=0;j<n;j++) {m[0][a[0][i]+a[1][j]]=1;m[1][a[2][i]+a[3][j]]=1;}}for(it=m[0].begin();it!=m[0].end();it++)b[0][nt++]=it->first;for(it=m[1].begin();it!=m[1].end();it++)b[1][mt++]=it->first;for(i=0 ; i<n ; i++){for(j=0;j<nt;j++){f=find(a[4][i],b[0][j],0,mt);if( f ) break;}if( f ) break;} if(f) puts("Yes");else puts( "No");}return 0;}
- Trouble(多校联合)
- hdu 4334 Trouble 排序+优化 多校联合赛(四)第四题
- trouble
- trouble
- 2012多校联合(3)
- 线段树hdu4893(多校联合)
- 网络流hdu4888(多校联合)
- LCA(2009多校联合)hdu2874
- dp(2014多校联合)
- 划分树(多校联合)hdu3473
- 后缀自动机(hdu4641多校联合)
- Delicious Apples(多校联合训练)
- 多校联合集训(汇总)
- HDU 4334 Trouble(Hash)
- HDU 4334 Trouble (暴力)
- 多校联合1004,hdu3832
- 2012多校联合(1
- 多校联合 8.24 Encode
- linux操作系统的组成有哪几部分?
- Ubuntu下gcc安装及使用
- android Activity之间数据传递 Parcelable和Serializable接口的使用
- C++发送邮件-jwsmpt
- 使用HTML5 Web存储实现离线工作
- Trouble(多校联合)
- Windows环境 Apache 安装后手动添加Service方法
- myeclipse安装插件的方法
- 是时候清除你的僵尸代码了
- PHP和Ajax实现二级联动下拉菜单(代码、详细注释)
- #define用法_总结
- Tomcat的性能优化及部署时的参数调整
- 转载:FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS
- CSS架构目标:预测、重用、扩展、维护