题面

题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走,

如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合

题解:我们可以选择一个边角的位置,每次都让一个怪移动到那里,同时暴力维护剩下的怪的位置,暴力走就可以了

不过后面发现好像直接随机也能过去? 下面我们队3个人的...

  1. #include <iostream>
  2. #include<string>
  3. #include<cstring>
  4. #include<map>
  5. #include<queue>
  6. using namespace std;
  7. char puzzle[][];
  8. int kangaroo[][];
  9. bool tag[][];
  10. string ans;
  11. int n, m;
  12. const int a[][] = { {,},{-,},{,},{,-} };
  13. const string moving[] = { "D","U","R","L" };
  14. struct node {
  15. int x, y;
  16. string c;
  17. };
  18. node start;
  19. queue<node> fuck;
  20. string moveway[][];
  21. string addmove(int x)
  22. {
  23. if (x == )
  24. return moving[];
  25. if (x == )
  26. return moving[];
  27. if (x == )
  28. return moving[];
  29. return moving[];
  30. }
  31. bool check(int x, int y)
  32. {
  33. if (x > && x <= n && y > && y <= m && puzzle[x][y] != '')
  34. return true;
  35. else
  36. return false;
  37. }
  38. int guess_sum=;
  39. bool check_around(int x, int y)
  40. {
  41. int sum = ,j;
  42. for (int i = ; i < ; i++)
  43. {
  44. int ax = x + a[i][];
  45. int ay = y + a[i][];
  46. if (check(ax, ay) && kangaroo[ax][ay] == )
  47. {
  48. sum++;
  49. j = i;
  50. }
  51. }
  52. if (sum==)
  53. {
  54. guess_sum = j;
  55. return true;
  56. }
  57. else
  58. return false;
  59. }
  60. void BFS()
  61. {
  62. while (!fuck.empty())
  63. {
  64. node tmp = fuck.front();
  65. fuck.pop();
  66. for (int i = ; i < ; i++)
  67. {
  68. int x = tmp.x + a[i][];
  69. int y = tmp.y + a[i][];
  70. if (check(x, y) && kangaroo[x][y] == && tag[x][y] == false)
  71. {
  72. node new_node;
  73. new_node.x = x;
  74. new_node.y = y;
  75. new_node.c = addmove(i) + tmp.c;
  76. moveway[x][y] = new_node.c;
  77. tag[x][y] = true;
  78. fuck.push(new_node);
  79. }
  80. }
  81. }
  82. }
  83. node needmove;
  84. bool judge()
  85. {
  86. needmove.c = "";
  87. for (int i = ; i <= n; i++)
  88. for (int j = ; j <= m; j++)
  89. if (i != start.x || j != start.y)
  90. {
  91. if (kangaroo[i][j] > )
  92. {
  93. if (needmove.c == "" || needmove.c.size() < moveway[i][j].size())
  94. {
  95. needmove.x = i;
  96. needmove.y = j;
  97. needmove.c = moveway[i][j];
  98. }
  99. }
  100. }
  101. if (needmove.c != "")
  102. return false;
  103. return true;
  104. }
  105. void movex(int& x, int y, char c)
  106. {
  107. if (c == 'U'&&x - > && puzzle[x - ][y] != '')
  108. x--;
  109. if (c == 'D'&&x + <= n && puzzle[x + ][y] != '')
  110. x++;
  111. }
  112. void movey(int x, int& y, char c)
  113. {
  114. if (c == 'L'&&y - > && puzzle[x][y - ] != '')
  115. y--;
  116. if (c == 'R'&&y + <= m && puzzle[x][y + ] != '')
  117. y++;
  118. }
  119. void movekangaroo()
  120. {
  121. int tmp[][];
  122. for (int k = ; k < needmove.c.size(); k++)
  123. {
  124. for (int i = ; i <= n; i++)
  125. for (int j = ; j <= m; j++)
  126. tmp[i][j] = kangaroo[i][j];
  127. char c = needmove.c[k];
  128. for (int i = ; i <= n; i++)
  129. for (int j = ; j <= m; j++)
  130. if (kangaroo[i][j] > )
  131. {
  132. int newx = i, newy = j;
  133. tmp[i][j] = ;
  134. movex(newx, newy, c);
  135. movey(newx, newy, c);
  136. tmp[newx][newy] = ;
  137. }
  138. for (int i = ; i <= n; i++)
  139. for (int j = ; j <= m; j++)
  140. kangaroo[i][j] = tmp[i][j];
  141. }
  142. }
  143. int len = ;
  144. int main()
  145. {
  146. int i, j, k;
  147. ios::sync_with_stdio(false);
  148. cin.tie();
  149. cin >> n >> m;
  150. for (i = ; i <= n; i++)
  151. for (j = ; j <= m; j++)
  152. cin >> puzzle[i][j];
  153. memset(kangaroo, , sizeof(kangaroo));
  154. int sum = ;
  155. for (i = ; i <= n; i++)
  156. for (j = ; j <= m; j++)
  157. if (puzzle[i][j] == '')
  158. {
  159. sum++;
  160. kangaroo[i][j] = ;
  161. }
  162. if (sum == || sum == )
  163. {
  164. cout << "L\n";
  165. return ;
  166. }
  167. for (i = ; i <= n; i++)
  168. for (j = ; j <= m; j++)
  169. if (kangaroo[i][j] == && check_around(i, j))
  170. {
  171. start.x = i;
  172. start.y =j;
  173. start.c = "";
  174. }
  175. for (i = ; i <= n; i++)
  176. for (j = ; j <= m; j++)
  177. moveway[i][j] = "";
  178. memset(tag, false, sizeof(tag));
  179. fuck.push(start);
  180. tag[start.x][start.y] = true;
  181. BFS();
  182. /*for (i = 1; i <= n; i++)
  183. {
  184. for (j = 1; j <= m; j++)
  185. if (kangaroo[i][j] > 0)
  186. cout << i << " " << j << " " << moveway[i][j] << endl;
  187. }*/
  188. ans = "";
  189. while (!judge() && len < ) //get needmove
  190. {
  191. len += needmove.c.size();
  192. ans += needmove.c;
  193. movekangaroo();
  194. /* cout << needmove.x << " " << needmove.y << " "<<needmove.c<<endl;
  195. for (i = 1; i <= n; i++)
  196. {
  197. for (j = 1; j <= m; j++)
  198. cout << puzzle[i][j];
  199. for (j = 1; j <= 20; j++)
  200. cout << " ";
  201. for (j = 1; j <= m; j++)
  202. cout << kangaroo[i][j];
  203. cout << endl;
  204. }
  205. cout << endl;*/
  206. }
  207. if (len == )
  208. ans = ans + "R";
  209. cout << ans << "\n";
  210. }
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define PII pair<int,int>
  4. #define sl(x) scanf("%lld",&x)
  5. using namespace std;
  6. ll s[][];
  7. int main()
  8. {
  9. ll n,m,i,j,k;
  10. sl(n);sl(m);
  11. for(i = ;i < n;i++)
  12. scanf("%s",s[i]);
  13. srand(time());
  14. char ans[] = {'L','R','D','U'};
  15. int l = ,r = ;
  16. for(i = ;i <= ;i++)
  17. {
  18. char ch = ans[rand()%];
  19. printf("%c",ch);
  20. }
  21. puts("");
  22. return ;
  23. }
  1. #include<bits/stdc++.h>
  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=;
  9. int n,m;
  10. char s[maxn][maxn];
  11. int a[maxn][maxn];
  12. int b[maxn][maxn];
  13. int p[]={,,,-};
  14. int q[]={,-,,};
  15. char ch[]={'L','R','U','D'};
  16. int deg(int x,int y) {
  17. int res=;
  18. rep(i,,) {
  19. int xx=x+p[i];
  20. int yy=y+q[i];
  21. if(xx<||xx>=n||yy<||yy>=m) continue;
  22. if(s[xx][yy]=='') 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<Node> Q;
  40.  
  41. int main() {
  42. scanf("%d%d",&n,&m);
  43. rep(i,,n-) scanf("%s",s[i]);
  44. int ex,ey;
  45. int sum=;
  46. rep(i,,n-) {
  47. rep(j,,m-) {
  48. if(s[i][j]=='') a[i][j]=;
  49. else {
  50. a[i][j]=;
  51. sum++;
  52. }
  53. }
  54. }
  55. if(sum==) return *puts("");
  56. rep(i,,n-) {
  57. rep(j,,m-) {
  58. if(s[i][j]==''&&deg(i,j)==) {
  59. ex=i;
  60. ey=j;
  61. }
  62. }
  63. }
  64. // printf("%d %d\n",ex,ey);
  65. // puts("");
  66. int epoch=;
  67. int t=;
  68. while(t<=) {
  69. if(a[ex][ey]==sum) break;
  70. mem(vis,);
  71. mem(f,-);
  72. while(!Q.empty()) Q.pop();
  73. Node start(ex,ey,);
  74. Q.push(start);
  75. vis[ex][ey]=;
  76. int sx=ex,sy=ey,step=;
  77. while(!Q.empty()) {
  78. Node o=Q.front();
  79. Q.pop();
  80. if(step<o.step&&a[o.x][o.y]) {
  81. step=o.step;
  82. sx=o.x;
  83. sy=o.y;
  84. }
  85. rep(i,,) {
  86. int x=o.x+p[i];
  87. int y=o.y+q[i];
  88. if(x<||x>=n||y<||y>=m) continue;
  89. if(s[x][y]==''||vis[x][y]) continue;
  90. Node node(x,y,o.step+);
  91. f[x][y]=i;
  92. vis[x][y]=;
  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() {
  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,);
  110. rep(i,,n-) {
  111. rep(j,,m-) {
  112. if(s[i][j]=='') continue;
  113. int x=i-p[o];
  114. int y=j-q[o];
  115. if(x<||x>=n||y<||y>=m||s[x][y]=='') {
  116. b[i][j]+=a[i][j];
  117. }
  118. else {
  119. b[x][y]+=a[i][j];
  120. }
  121. }
  122. }
  123. rep(i,,n-) {
  124. rep(j,,m-) {
  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 ;
  134. }

Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机的更多相关文章

  1. Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP

    题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...

  2. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律

    题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...

  3. Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流

    题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...

  4. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖

    题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...

  5. Gym - 101981J The 2018 ICPC Asia Nanjing Regional Contest J.Prime Game 计数

    题面 题意:1e6的数组(1<a[i]<1e6),     mul (l,r) =l × (l+1) ×...× r,  fac(l,r) 代表 mul(l,r) 中不同素因子的个数,求s ...

  6. Gym - 101981A The 2018 ICPC Asia Nanjing Regional Contest A.Adrien and Austin 简单博弈

    题面 题意:一堆有n个石子,编号从1⋯N排成一列,两个人Adrien 和Austin玩游戏,每次可以取1⋯K个连续编号的石子,Adrien先手,谁不能取了则输 题解:k==1时,显然和n奇偶相关,当k ...

  7. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  8. The 2018 ACM-ICPC Asia Qingdao Regional Contest K XOR Clique

    K XOR Clique BaoBao has a sequence a​1​​,a​2​​,...,a​n​​. He would like to find a subset S of {1,2,. ...

  9. 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)

    题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...

随机推荐

  1. (转)分布式文件存储FastDFS(二)FastDFS安装

    http://blog.csdn.net/xingjiarong/article/details/50559761 在前面的一篇中,我们分析了FastDFS的架构,知道了FastDFS是由客户端,跟踪 ...

  2. java_randomAccessFile类的使用

    RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件.RandomAccessFile支持随机访问文件,可以访问文件的任意位置 (1)java文件模型 在硬盘上 ...

  3. hdu 4870

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. Xcode 插件因为UUID原因不能使用解决办法

    Xcode 经常因为一些原因不能使用,需要重新在  ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins目录下对每一个插件包下的p ...

  5. webAPP 原生APP 对比

    Web App即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发具有跨平台的优势,该模式通常由“HTML5云网站+APP应用客户端”两部份构成,APP应用客户端只需安装应用的框架 ...

  6. Linux:SSH连接原理

    1,SSH开启 2,执行:ssh username@ip地址 例如ssh root@10.1.1.1 3,查看cat ./ssh/kown_hosts 里面就保存了10.1.1.1的公钥了 4,对比一 ...

  7. git 的简单使用(2)

    一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: $ rm test.txt 你可以使用 git rm test.txt来删除 然后用git commit -m " ...

  8. copy contents of file with variable number in Matlab

    input : transient.case output: transient_1.case, transient_2.case, transient_3.case ... ************ ...

  9. 对vuex的浅解

    vuex是什么? 官网的解释是 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也 ...

  10. not in 和 <> 不走索引

    首先我们要知道的一点就是CBO的代码oracle是不会对我们公开的,起码现在是.所以本文中的结论不一定适用所有的版本.在应用本文的结论之前最好先试一下. ok 下面就是本文的结论,当你在where语句 ...