bzoj1033: [ZJOI2008]杀蚂蚁antbuster

【bzoj1033: [ZJOI2008]杀蚂蚁antbuster】bzoj1033: [ZJOI2008]杀蚂蚁antbuster
一道可以用来锻炼代码力的模拟。
也可能只是因为我太弱了
代码
#include #include #include using namespace std; int m2[9][9],mx[]={0,1,0,-1},my[]={1,0,-1,0}; int i,j,k,brn,liv,tpx,tpy,MXX,MXY,tmp,mxm; double pw[40000]; bool ck,m1[9][9],mov[4]; struct loc{int X,Y; }p[20],zer; struct ant{int ag,lv,hp; loc now,pre; bool cak; }a[6]; int dis(loc x,loc y) {return (x.X-y.X)*(x.X-y.X)+(x.Y-y.Y)*(x.Y-y.Y); } int n,m,s,d,r,x,y,t; int main() { scanf("%d%d%d%d%d",&n,&m,&s,&d,&r); for(i=0; i"%d%d",&p[i].X,&p[i].Y),m1[p[i].X][p[i].Y]=1; scanf("%d",&t); zer.X=zer.Y=0; pw[0]=4; for(i=1; i<=t/6+1; i++) pw[i]=pw[i-1]*1.1; for(k=1; k<=t; k++) { if(liv<6&&!m1[0][0]) { a[liv].ag=a[liv].cak=0; a[liv].lv=(brn++)/6+1; a[liv].hp=pw[a[liv].lv]; a[liv].pre=a[liv++].now=zer; m1[0][0]=1; } for(i=0; in||tpy>m||tpy<0||tpx<0|| m1[tpx][tpy])mov[j]=0,tmp++; else mxm=max(mxm,m2[tpx][tpy]); } a[i].pre=a[i].now; if(tmp<4) { m1[a[i].now.X][a[i].now.Y]=0; for(j=0; ; j++) { tpx=a[i].now.X+mx[j],tpy=a[i].now.Y+my[j]; if(mov[j]&&m2[tpx][tpy]==mxm)break; } if(!((a[i].ag+1)%5)) for(j=(j+3)%4; ; j=(j+3)%4) { tpx=a[i].now.X+mx[j],tpy=a[i].now.Y+my[j]; if(mov[j])break; } a[i].now.X=tpx,a[i].now.Y=tpy; m1[tpx][tpy]=1; } if(!ck&&a[i].now.X==n&&a[i].now.Y==m) ck=1,a[i].cak=1,a[i].hp=min(a[i].hp+pw[a[i].lv]/2,pw[a[i].lv]); } for(i=0; i1; for(j=0; jr*r)continue; if(j==liv) for(j=0; dis(a[j].now,p[i])>mxm; j++); tmp=j,x=a[j].now.X-p[i].X,y=a[j].now.Y-p[i].Y; MXX=max(a[j].now.X,p[i].X),tpx=min(a[j].now.X,p[i].X); MXY=max(a[j].now.Y,p[i].Y),tpy=min(a[j].now.Y,p[i].Y); for(j=0; j=tpx&&a[j].now.X<=MXX&&a[j].now.Y>=tpy&&a[j].now.Y<=MXY &&fabs((a[j].now.X-p[i].X)*y-(a[j].now.Y-p[i].Y)*x)/sqrt(x*x+y*y)<=0.5) a[j].hp-=d; } for(i=0; i

    推荐阅读