模拟水珠那个游戏。
小水珠超过边界会消失。
会有两个水珠同时到达一个size=4大水珠的情况。要移动完统一爆炸
1 #include2 #include 3 #include 4 #include 5 6 //using namespace std; 7 8 const int maxn = 100+10; 9 int r,c,n,T; 10 11 int dx[] = { 0,0,1,-1}; 12 int dy[] = { 1,-1,0,0}; 13 14 struct dp 15 { 16 int x,y; 17 int dir; 18 bool die; 19 dp(int _x,int _y,int _dir):x(_x),y(_y),dir(_dir){ 20 die = false; 21 } 22 bool out() 23 { 24 return (x < 1 || x > r || y < 1 || y > c); 25 } 26 void kill() 27 { 28 die = true; 29 } 30 void move() 31 { 32 x += dx[dir]; 33 y += dy[dir]; 34 if(out()) 35 { 36 kill(); 37 return ; 38 } 39 } 40 bool alive() 41 { 42 return !die; 43 } 44 }; 45 std::vector drops; 46 47 struct wdp 48 { 49 int x,y; 50 int siz; 51 int t; 52 int id; 53 void display() 54 { 55 printf("%d %d\n",siz==-1? 0:1,siz==-1?t:siz); 56 } 57 void add(int tim) 58 { 59 if(siz == -1) return ; 60 siz += 1; 61 } 62 void split(int tim) 63 { 64 if(siz > 4) 65 { 66 siz = -1; 67 t = tim; 68 //printf("time:%d %d crack\n",tim,id); 69 for(int i=0;i<4;i++) 70 { 71 drops.push_back(dp(x,y,i)); 72 } 73 } 74 } 75 bool alive() 76 { 77 return siz != -1; 78 } 79 }waterdrop[maxn]; 80 81 bool merge(dp &a,wdp &b) 82 { 83 return (a.x == b.x && a.y == b.y); 84 } 85 86 void roll(int tim) 87 { 88 int cnt = drops.size(); 89 for(int i=0;i
想到了大一刚开始做的那个傻x坦克大战- -当时写一个判断子弹写半天