| ||||||||||
| 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 | |||||||||
谁能提供点数据,测试一晚上了找不出毛病#include<iostream.h>
int board[30][30];
class Centipede
{
public:
static int count;
Centipede *next;
void set(char,int,int,int);
void set(int,int,int,int,int);
void walk();
void crush();
void fallOff();
private:
int direction[2];
int Long;
int head[2];
};
int Centipede::count=0;
void Centipede::set(char d,int l,int x,int y)
{
switch(d)
{
case'U':
direction[0]=0;direction[1]=1;break;
case'D':
direction[0]=0;direction[1]=-1;break;
case'R':
direction[0]=1;direction[1]=0;break;
case'L':
direction[0]=-1;direction[1]=0;
}
set(direction[0],direction[1],l,x,y);
}
void Centipede::set(int d0,int d1,int l,int x,int y)
{
direction[0]=d0;
direction[1]=d1;
Long=l;
head[0]=x;
head[1]=y;
for(int i=0;i<Long;i++)
board[head[1]-i*direction[1]][head[0]-i*direction[0]]=1;
}
void Centipede::walk()
{
if(Long>0)
{
if((head[0]+direction[0])>29||(head[1]+direction[1])>29||(head[0]+direction[0])<0||
(head[1]+direction[1])<0)
fallOff();
else
{
head[0]+=direction[0];
head[1]+=direction[1];
board[head[1]][head[0]]++;
board[head[1]-Long*direction[1]][head[0]-Long*direction[0]]--;
}
}
}
void Centipede::crush()
{
for(int i=0;i<Long;i++)
if(board[head[1]-i*direction[1]][head[0]-i*direction[0]]>1)
{
if(Long==1)
{
Long=0;
count--;
}
else if(i==0)
{
head[0]=head[0]-direction[0];
head[1]=head[1]-direction[1];
Long-=1;
}
else if(i==Long-1)
Long-=1;
else
{
count++;
Centipede * newc=new Centipede;
newc->next=next;
next=newc;
newc->set(direction[0],direction[1],Long-i-1,head[0]-(i+1)*direction[0],
head[1]-(i+1)*direction[1]);
Long=i;
}
}
}
void Centipede::fallOff()
{
Long--;
if(Long==0)
count--;
board[head[1]-Long*direction[1]][head[0]-Long*direction[0]]--;
}
void main()
{
int number,Long,x,y;
char direction;
Centipede * head=NULL,*pf;
cin>>number;
Centipede::count=number;
for(int i=0;i<number;i++)
{
cin>>direction>>Long>>x>>y;
Centipede *p=new Centipede;
p->next=NULL;
p->set(direction,Long,x,y);
if(head==NULL)
head=p;
else
{
for(pf=head;pf->next!=NULL;pf=pf->next)
;
pf->next=p;
}
}
while(Centipede::count!=0)
{
for(pf=head;pf!=NULL;pf=pf->next)
{ pf->walk();
Centipede *pf2;
for(pf2=head;pf2!=NULL;pf2=pf2->next)
pf2->crush();
}
}
cout<<" ";
for(i=0;i<10;i++)
cout<<"0 ";
for(i=0;i<10;i++)
cout<<"1 ";
for(i=0;i<10;i++)
cout<<"2 ";
cout<<endl<<" ";
for(i=0;i<10;i++)
cout<<i<<' ';
for(i=0;i<10;i++)
cout<<i<<' ';
for(i=0;i<10;i++)
cout<<i<<' ';
cout<<endl;
for(i=29;i>=0;i--)
{
if(i>9)
cout<<i<<' ';
else
cout<<0<<i<<' ';
for(int j=0;j<30;j++)
if(board[i][j]==0)
cout<<". ";
else
cout<<"X ";
cout<<endl;
}
while(head!=NULL)
{
pf=head->next;
delete head;
head=pf;
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator