标签:
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 728 Accepted Submission(s): 287
#include <iostream> #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; int f[4][2]={0,1,-1,0,0,-1,1,0},flag; int mp[10][10]; struct node { int x,y,f; }; queue<node>q,qq;//两个队列分别存这一秒飞溅的水滴以及下一秒的 node s,t; void init() { for(int i=1;i<=6;i++) for(int j=1;j<=6;j++) { if(i==1&&j==1)continue; scanf("%d",&mp[i][j]); } } bool jug(int x,int y) { if(x<1||x>6||y<1||y>6)return false; return true; } void get_di(int x,int y) { mp[x][y]=0; for(int i=0;i<4;i++) { s.x=x+f[i][0],s.y=y+f[i][1],s.f=i; if(jug(s.x,s.y)) { qq.push(s); } } } void print() { for(int i=1;i<=6;i++) { for(int j=1;j<=6;j++) { if(j==1)printf("%d",mp[i][j]); else printf(" %d",mp[i][j]); } printf("\n"); } } void scanner(int x,int y) { while(!q.empty())q.pop(); while(!qq.empty())qq.pop(); if(mp[x][y]<4){mp[x][y]++;return;} mp[x][y]=0; for(int i=0;i<4;i++) { s.x=x+f[i][0],s.y=y+f[i][1],s.f=i; if(jug(s.x,s.y)) q.push(s); } while(1) //模拟每一秒的状态 { flag=0; while(!q.empty()) { flag=1; s=q.front();q.pop(); if(mp[s.x][s.y]==0) { t.x=s.x+f[s.f][0],t.y=s.y+f[s.f][1],t.f=s.f; if(jug(t.x,t.y)) qq.push(t); } if(mp[s.x][s.y]>0)mp[s.x][s.y]++; } for(int i=1;i<=6;i++) for(int j=1;j<=6;j++) if(mp[i][j]>4)flag=1,get_di(i,j); swap(q,qq); if(!flag)break; } } int main() { int m,x,y; while(~scanf("%d",&mp[1][1])){ init(); scanf("%d",&m); while(m--){ scanf("%d %d",&x,&y); scanner(x,y); } print(); printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/weibaba/p/5784189.html