2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
来源:互联网 发布:惠州惠阳区网络问政 编辑:程序博客网 时间:2024/04/30 09:40
今天的比赛让我又回忆起了长沙被虐的那次。。。感觉比长沙那次做起来相对轻松不少。。。
1001 Robot
一道概率题,总共只有m*n的复杂度,每次遍历1~n的位置上的概率分布,再得到相应的下一位的概率,最后只要将l~r区间内的概率相加即可,直接数组可能会MLE,建议使用滚动数组。ORZ Baoge :传送门
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<map>using namespace std;inline void RD(int &ret){ char c; do { c=getchar(); } while(c<'0'||c>'9'); ret=c-'0'; while((c=getchar())>='0'&&c<='9') { ret=ret*10+(c-'0'); }}inline void OT(int a){ if(a>=10) { OT(a/10); } putchar(a%10+'0');}int w,m,n,l,r,a,b;double ans,p[2][201];int main(){ int i,j; while(1) { RD(n); RD(m); RD(l); RD(r); if(m==0&&n==0&&l==0&&r==0) { break; } memset(p,0.0,sizeof(p)); p[0][1]=1.0;//初始位置概率为1 for(i=1; i<=m; ++i) { RD(w); for(j=1; j<=n; ++j) { if(p[0][j]==0) { continue; } a=j+w; while(a>n)//注意边界 { a-=n; } b=j-w; while(b<=0) { b+=n; } p[1][a]+=p[0][j]*0.5;//注意是+=,将之前的和得到的相加 p[1][b]+=p[0][j]*0.5; } for(j=1; j<=n; ++j)//滚动数组 { p[0][j]=p[1][j]; p[1][j]=0; } } ans=0; for(i=l;i<=r;++i) { ans+=p[0][i]; } printf("%.4f\n",ans); } return 0;}
1002 X-Boxes
赛后AC的,发现是java大数除法,果然需要全面发展的啊。。。
import java.io.*;import java.math.*;import java.util.*;import java.text.*;public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); BigInteger s,n,tmp; int i,k,t,p; t=cin.nextInt(); while(t>0) { t--; n=cin.nextBigInteger(); k=cin.nextInt(); s=new BigInteger("0"); p=1; for(i=1; i<k; i++) { p*=2; } while(true) { n=n.divide(BigInteger.valueOf(p)); tmp=n.subtract(n.divide(BigInteger.valueOf(2))); if(tmp.compareTo(BigInteger.ZERO)==0) { break; } s=s.add(tmp); n=n.divide(BigInteger.valueOf(2)); } System.out.println(s); } }}
1003 Transformation
线段树区间处理,数据结构果然很神,让我的输入输出优化有了充分的用武之地。。。MB Baoge的手写线段树。。。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<map>using namespace std;inline void RD(int &ret){ char c; do { c=getchar(); } while(c<'0'||c>'9'); ret=c-'0'; while((c=getchar())>='0'&&c<='9') { ret=ret*10+(c-'0'); }}inline void OT(int a){ if(a>=10) { OT(a/10); } putchar(a%10+'0');}struct xl{ int l,r; long long vis;} s[400000];int n,m,c,x,y;long long p;//注意是long long不然会WAvoid build(int ll,int rr,int tmp){ int mid; s[tmp].l=ll; s[tmp].r=rr; s[tmp].vis=-1; if(ll==rr) { return; } else { mid=(ll+rr)/2; build(ll,mid,tmp*2); build(mid+1,rr,tmp*2|1); }}void push(int tmp){ s[tmp*2].vis=s[tmp*2|1].vis=s[tmp].vis; s[tmp].vis=-1;}void up1(int ll,int rr,int tmp,long long id){ if(s[tmp].l==ll&&s[tmp].r==rr&&s[tmp].vis!=-1) { s[tmp].vis+=id; s[tmp].vis=s[tmp].vis%10007; } else { if(s[tmp].vis!=-1) { push(tmp); } int mid=(s[tmp].l+s[tmp].r)/2; if(ll>mid) { up1(ll,rr,tmp*2|1,id); } else if(rr<=mid) { up1(ll,rr,tmp<<1,id); } else { up1(ll,mid,tmp*2,id); up1(mid+1,rr,tmp*2|1,id); } }}void up2(int ll,int rr,int tmp,long long id){ if(s[tmp].l==ll&&s[tmp].r==rr&&s[tmp].vis!=-1) { s[tmp].vis*=id; s[tmp].vis=s[tmp].vis%10007; } else { if(s[tmp].vis!=-1) { push(tmp); } int mid=(s[tmp].l+s[tmp].r)/2; if(ll>mid) { up2(ll,rr,tmp*2|1,id); } else if(rr<=mid) { up2(ll,rr,tmp*2,id); } else { up2(ll,mid,tmp*2,id); up2(mid+1,rr,tmp*2|1,id); } }}void up3(int ll,int rr,int tmp,long long id){ if(s[tmp].l==ll&&s[tmp].r==rr) { s[tmp].vis=id; s[tmp].vis=s[tmp].vis%10007; } else { if(s[tmp].vis!=-1) { push(tmp); } int mid=(s[tmp].l+s[tmp].r)/2; if(ll>mid) { up3(ll,rr,tmp*2|1,id); } else if(rr<=mid) { up3(ll,rr,tmp*2,id); } else { up3(ll,mid,tmp*2,id); up3(mid+1,rr,tmp*2|1,id); } }}int q(int ll,int rr,int tmp,long long f){ int i; long long w; if(s[tmp].vis!=-1) { w=1; for(i=0; i<f; i++) { w*=s[tmp].vis; } return (w*(rr-ll+1))%10007; } else { int mid=(s[tmp].l+s[tmp].r)/2; if(rr<=mid) { return q(ll,rr,tmp*2,f)%10007; } else if(ll>mid) { return q(ll,rr,tmp*2|1,f)%10007; } else { return (q(ll,mid,tmp*2,f)+q(mid+1,rr,tmp*2|1,f))%10007; } }}int main(){ int i,ans; while(1) { RD(n); RD(m); if(n==0&&m==0) { return 0; } build(1,n,1); s[1].vis=0; for(i=0; i<m; i++) { RD(c); RD(x); RD(y); scanf("%lld",&p); if(c==1) { up1(x,y,1,p); } else if(c==2) { up2(x,y,1,p); } else if(c==3) { up3(x,y,1,p); } else if(c==4) { ans=q(x,y,1,p); OT(ans); printf("\n"); } } } return 0;}
1009 Building bridges
水题不多说,暴力直接搜
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<map>using namespace std;inline void RD(int &ret){ char c; do { c=getchar(); } while(c<'0'||c>'9'); ret=c-'0'; while((c=getchar())>='0'&&c<='9') { ret=ret*10+(c-'0'); }}inline void OT(int a){ if(a>=10) { OT(a/10); } putchar(a%10+'0');}char a[41][41];int main(){ int i,j,m,n,xx,yy,x,y,l,k,rr,ll,M,MM; while(1) { RD(m); RD(n); if(m==0&&n==0) { break; } for(i=0; i<m; ++i) { for(j=0; j<n; ++j) { scanf("%c",&a[i][j]); } getchar(); } MM=10000; for(i=0; i<m; ++i) { for(j=0; j<n; ++j) { if(a[i][j]=='H') { M=10000; for(l=0; l<m; ++l) { for(k=0; k<n; ++k) { if(a[l][k]=='C') { if(abs(i-l)+abs(j-k)<M) { M=abs(i-l)+abs(j-k); x=l; y=k; } } } } if(M<MM) { MM=M; xx=x; yy=y; rr=i; ll=j; } } } } printf("%d %d% d% d\n",rr,ll,xx,yy); } return 0;}
1010 Shaolin
Splay树,模板题,直接套用Kong神的模板,1A不解释了。。。
Kong神BLOG:传送门
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<map>using namespace std;inline void RD(int &ret){ char c; do { c=getchar(); } while(c<'0'||c>'9'); ret=c-'0'; while((c=getchar())>='0'&&c<='9') { ret=ret*10+(c-'0'); }}inline void OT(int a){ if(a>=10) { OT(a/10); } putchar(a%10+'0');}struct xl{ int x,y;} ax[111111];int ch[111111][2],num[111111],fa[111111],data[1111111];int root,tot;void rotate(int x,int kind){ int y=fa[x]; ch[y][!kind]=ch[x][kind]; fa[ch[x][kind]]=y; if(fa[y]) { ch[fa[y]][ch[fa[y]][1]==y]=x; } fa[x]=fa[y]; ch[x][kind]=y; fa[y]=x;}void Splay(int x,int s){ int z,y,kind; while(fa[x]!=s) { if(fa[fa[x]]==s) { rotate(x,ch[fa[x]][0]==x); } else { y=fa[x]; z=fa[y]; kind=(ch[z][0]==y); if(ch[y][kind]==x) { rotate(x,!kind); rotate(x,kind); } else { rotate(y,kind); rotate(x,kind); } } } if(s==0) { root=x; }}void newNode(int& x,int k,int father){ x=++tot; ch[x][0]=ch[x][1]=0; data[x]=k; fa[x]=father;}int insert(int k){ int r=root; while(ch[r][data[r]<k]) { if(data[r]==k) { Splay(r ,0); return 0; } r=ch[r][data[r]<k]; } newNode(ch[r][data[r]<k],k,r); Splay(ch[r][data[r]<k],0); return 1;}int get_pree(int k){ int d=ch[k][0]; if(d==0) { return -1; } while(ch[d][1]) { d=ch[d][1]; } return d;}int get_next(int k){ int d=ch[k][1] ; if(d==0) { return -1; } while(ch[d][0]) { d=ch[d][0]; } return d;}int main(){ int n,i,a1,a2; while(1) { RD(n); if(n==0) { break; } root=tot=0; for(i=1; i<=n; i++) { RD(ax[i].x); RD(ax[i].y); if(i==1) { printf("%d %d\n",ax[i].x,1); newNode(root,ax[i].y,0); continue ; } if(insert(ax[i].y)==0) { continue; } a1=get_next(root); a2=get_pree(root); if(a1==-1) { printf("%d %d\n",ax[i].x,ax[a2].x); } else if(a2==-1) { printf("%d %d\n",ax[i].x,ax[a1].x); } else { if(abs(data[a1]-data[root])<abs(data[root]-data[a2])) { printf("%d %d\n",ax[i].x,ax[a1].x); } else if(abs(data[a1]-data[root])>abs(data[root]-data[a2])) { printf("%d %d\n",ax[i].x,ax[a2].x); } else { if(data[a1]<data[a2]) { printf("%d %d\n",ax[i].x,ax[a1].x); } else { printf("%d %d\n",ax[i].x,ax[a2].x); } } } } } return 0 ;}
- 2013ACM-ICPC杭州赛区全国邀请赛(题目重现)
- hdu 4576 robot 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现-1001-robot
- hdu 4585 Shaolin 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- hdu 4585 Shaolin 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- 2013ACM-ICPC杭州赛区全国邀请赛 ——Robot
- 2013 ACM-ICPC南京赛区全国邀请赛——题目重现
- hdu 4584 building-bridge 暴力的题,怎么暴力怎么干。。2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- HDU_2013 ACM-ICPC南京赛区全国邀请赛——题目重现
- 2013ACM-ICPC杭州赛区全国邀请赛——X-Boxes
- 2013ACM-ICPC杭州赛区全国邀请赛——Random Walk
- hdu4576 Robot 2013 ACM-ICPC杭州赛区全国邀请赛 1
- hdu 4578 Transformation 2013ACM-ICPC杭州赛区全国邀请赛
- 2013 ACM-ICPC吉林通化全国邀请赛——题目重现
- hdu4577 X-Boxes ACM-ICPC杭州赛区全国邀请赛 2
- hdu 4497 GCD and LCM(2013 ACM-ICPC吉林通化全国邀请赛——题目重现)
- 2013 ACM-ICPC南京赛区全国邀请赛
- 2013 ACM-ICPC长沙赛区全国邀请赛——Travel in time
- 安装ubuntu 13.04
- 耀乐团新专辑上线 爱的宣言《跟我回家》熔化七夕
- hdu(4422)The Little Girl who Picks Mushrooms
- HDU4373(组合公式推导+Lucas定理+中国剩余定理)
- 易语言注册多个热键源码
- 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- JNI学习积累之一 ---- 常用函数大全
- 天津网络赛---数论分析题)
- hdu 4584水题
- UVA 270 Lining Up
- 高次同余方程式的解数及解法
- 周渝民默认与喻虹渊恋情 七夕不送女友礼物
- POJ2154(Pólya定理与欧拉函数优化)
- 理想的技术面试过程