Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:在下来回馈社会了!!数据和参考程序!!In Reply To:在下来回馈社会了!!数据和参考程序!! Posted by:talenth1 at 2010-12-11 17:22:06 > 数据地址:http://acm.pku.edu.cn/pku2004/data/Preliminary.zip > 下载页面:http://acm.pku.edu.cn/pku2004/ques.htm 选网络预赛 > > 我的dp程序: > /* > ID: talenth1 > PROG: p1925 > LANG: C++ > */ > #include<iostream> > #include<cstdlib> > #include<cstring> > #include<cmath> > #define maxn 5001 > #define maxd 3000010 > #define oo 16843009 > using namespace std; > struct Node{ > int p,d; > }; > int t,n,h,edge,x[maxn],y[maxn],f[maxd]; > Node que[maxd]; > void datain() > { > scanf("%d",&n); > edge=0; > for(int i=1;i<=n;i++){ > scanf("%d%d",&x[i],&y[i]); > edge=max(edge,1+x[i]+(int)sqrt(1.0*y[1]*(2*y[i]-y[1]))); > } > h=y[1]; > } > void work() > { > __int64 dx,dy; > int ans=oo; > bool signal=false; > memset(f,1,sizeof(f)); > f[x[1]]=0; > for(int i=2;i<=n;i++){ > for(int k=x[i];k<=edge;k++){ > dx=k-x[i]; > dy=h-y[i]; > if(dx*dx+dy*dy>(__int64)y[i]*y[i])break; > if(2*x[i]-k>=x[1]) > f[k]=min(f[k],f[2*x[i]-k]+1); > else break; > if(k>=x[n]&&f[k]<ans){ > ans=f[k]; > signal=true; > } > } > } > if(signal)printf("%d\n",ans); > else printf("-1\n"); > } > int main() > { > scanf("%d",&t); > for(int i=1;i<=t;i++){ > datain(); > work(); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator