- 首页 > it技术 > >
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
推荐阅读