题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走,
如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合
题解:我们可以选择一个边角的位置,每次都让一个怪移动到那里,同时暴力维护剩下的怪的位置,暴力走就可以了
不过后面发现好像直接随机也能过去? 下面我们队3个人的...
1 #include 2 #include 3 #include 4 #include
1 #include 2 #define ll long long 3 #define PII pair 4 #define sl(x) scanf("%lld",&x) 5 using namespace std; 6 ll s[105][105]; 7 int main() 8 { 9 ll n,m,i,j,k;10 sl(n);sl(m);11 for(i = 0;i < n;i++)12 scanf("%s",s[i]);13 srand(time(0));14 char ans[4] = { 'L','R','D','U'};15 int l = 0,r = 0;16 for(i = 0;i <= 40002;i++)17 {18 char ch = ans[rand()%4];19 printf("%c",ch);20 }21 puts("");22 return 0;23 }
1 #include 2 3 using namespace std; 4 5 #define mem(a,i) memset(a,i,sizeof(a)) 6 #define rep(i,a,b) for(int i=a;i<=b;++i) 7 #define per(i,a,b) for(int i=a;i>=b;--i) 8 const int maxn=25; 9 int n,m; 10 char s[maxn][maxn]; 11 int a[maxn][maxn]; 12 int b[maxn][maxn]; 13 int p[4]={ 0,0,1,-1}; 14 int q[4]={ 1,-1,0,0}; 15 char ch[4]={ 'L','R','U','D'}; 16 int deg(int x,int y) { 17 int res=0; 18 rep(i,0,3) { 19 int xx=x+p[i]; 20 int yy=y+q[i]; 21 if(xx<0||xx>=n||yy<0||yy>=m) continue; 22 if(s[xx][yy]=='0') continue; 23 res++; 24 } 25 return res; 26 } 27 struct Node { 28 int x,y; 29 int step; 30 Node() {} 31 Node(int _x,int _y,int _step) { 32 x=_x; 33 y=_y; 34 step=_step; 35 } 36 }; 37 bool vis[maxn][maxn]; 38 int f[maxn][maxn]; 39 queue Q; 40 41 int main() { 42 scanf("%d%d",&n,&m); 43 rep(i,0,n-1) scanf("%s",s[i]); 44 int ex,ey; 45 int sum=0; 46 rep(i,0,n-1) { 47 rep(j,0,m-1) { 48 if(s[i][j]=='0') a[i][j]=0; 49 else { 50 a[i][j]=1; 51 sum++; 52 } 53 } 54 } 55 if(sum==1) return 0*puts(""); 56 rep(i,0,n-1) { 57 rep(j,0,m-1) { 58 if(s[i][j]=='1'&°(i,j)==1) { 59 ex=i; 60 ey=j; 61 } 62 } 63 } 64 // printf("%d %d\n",ex,ey); 65 // puts(""); 66 int epoch=50000; 67 int t=0; 68 while(t<=50000) { 69 if(a[ex][ey]==sum) break; 70 mem(vis,0); 71 mem(f,-1); 72 while(!Q.empty()) Q.pop(); 73 Node start(ex,ey,0); 74 Q.push(start); 75 vis[ex][ey]=1; 76 int sx=ex,sy=ey,step=0; 77 while(!Q.empty()) { 78 Node o=Q.front(); 79 Q.pop(); 80 if(step =n||y<0||y>=m) continue; 89 if(s[x][y]=='0'||vis[x][y]) continue; 90 Node node(x,y,o.step+1); 91 f[x][y]=i; 92 vis[x][y]=1; 93 Q.push(node); 94 } 95 } 96 // printf("%d %d\n",sx,sy); 97 // rep(i,0,n-1) { 98 // rep(j,0,m-1) { 99 // printf("%d ",a[i][j]);100 // }101 // puts("");102 // }103 while(1) {104 if(sx==ex&&sy==ey) break;105 int o=f[sx][sy];106 printf("%c",ch[o]);107 // printf("%d %d\n",sx,sy);108 t++;109 mem(b,0);110 rep(i,0,n-1) {111 rep(j,0,m-1) {112 if(s[i][j]=='0') continue;113 int x=i-p[o];114 int y=j-q[o];115 if(x<0||x>=n||y<0||y>=m||s[x][y]=='0') {116 b[i][j]+=a[i][j];117 }118 else {119 b[x][y]+=a[i][j];120 }121 }122 }123 rep(i,0,n-1) {124 rep(j,0,m-1) {125 a[i][j]=b[i][j];126 }127 }128 sx=sx-p[o];129 sy=sy-q[o];130 }131 }132 puts("");133 return 0;134 }