题意巨难懂。简言之,就是球互相碰撞时,主动碰撞的球将会停止,另一个球将沿着碰撞方向继续移动,不断碰撞。但是无法弹射紧挨着的球,但是若a弹射b,bc相邻,这种情况b可以弹射c。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 using namespace std;
  6
  7 #define MAXN 10
  8
  9 typedef struct {
 10     int x, y;
 11     char d;
 12 } node_t;
 13
 14 node_t nodes[15];
 15 char map[MAXN][MAXN];
 16 int on;
 17 // U < L < R < D.
 18 int dir[4][2] = {-1,0,0,-1,0,1,1,0};
 19
 20 bool check(int x, int y) {
 21     return x<0||x>=7||y<0||y>=8;
 22 }
 23
 24 char getDir(int k) {
 25     if (k==0) return 'U';
 26     if (k==1) return 'L';
 27     if (k==2) return 'R';
 28     return 'D';
 29 }
 30
 31 bool dfs(int n) {
 32     int i, j, k, x, y;
 33     bool flag;
 34
 35     if (n == 0)
 36         return true;
 37
 38     for (i=0; i<7; ++i) {
 39         for (j=0; j<8; ++j) {
 40             if (map[i][j] == 'O') {
 41                 for (k=0; k<4; ++k) {
 42                     x = i + dir[k][0];
 43                     y = j + dir[k][1];
 44                     if (check(x, y) || map[x][y]=='O')
 45                         continue;
 46                     flag = false;
 47                     while (!check(x, y)) {
 48                         if (map[x][y] == 'O') {
 49                             flag = true;
 50                             map[x][y] = 'X';
 51                             map[x-dir[k][0]][y-dir[k][1]] = 'O';
 52                         }
 53                         x += dir[k][0];
 54                         y += dir[k][1];
 55                     }
 56                     if (flag) {
 57                         map[i][j] = 'X';
 58                         nodes[n].x = i;
 59                         nodes[n].y = j;
 60                         nodes[n].d = getDir(k);
 61                         if (dfs(n-1))
 62                             return true;
 63                         do {
 64                             x -= dir[k][0];
 65                             y -= dir[k][1];
 66                             if (map[x][y] == 'O') {
 67                                 map[x][y] = 'X';
 68                                 map[x+dir[k][0]][y+dir[k][1]] = 'O';
 69                             }
 70                         } while (x!=i || y!=j);
 71                         map[i][j] = 'O';
 72                     }
 73                 }
 74             }
 75         }
 76     }
 77
 78     return false;
 79 }
 80
 81 int main() {
 82     int i = 0, j;
 83     int t = 0;
 84
 85 #ifndef ONLINE_JUDGE
 86     freopen("data.in", "r", stdin);
 87 #endif
 88
 89     while (scanf("%s", &map[i]) != EOF) {
 90         for (i=1; i<7; ++i)
 91             scanf("%s", &map[i]);
 92         on = 0;
 93         for (i=0; i<7; ++i)
 94             for (j=0; j<8; ++j)
 95                 if (map[i][j] == 'O')
 96                     ++on;
 97         dfs(on-1);
 98
 99         if (t != 0)
100             printf("\n");
101         printf("CASE #%d:\n", ++t);
102         for(i=on-1; i>=1; --i)
103             printf("%d %d %c\n", nodes[i].x, nodes[i].y, nodes[i].d);
104         getchar();
105         i = 0;
106     }
107
108     return 0;
109 }

转载于:https://www.cnblogs.com/bombe1013/p/4047839.html

【HDOJ】3500 Fling相关推荐

  1. 【HDOJ】4602 Partition

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=4602 [报告] 直接贴上标程解题报告:(虽然有些纠结,试一下就弄通了..) Problem C. Par ...

  2. 【HDOJ】4602 Partition_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=4602 [报告] 直接贴上标程解题报告:(虽然有些纠结,试一下就弄通了..) Problem C. Par ...

  3. 【HDOJ】1008 Elevator_天涯浪子_新浪博客

    [题目] http://acm.hdu.edu.cn/showproblem.php?pid=1008 [报告] 这是我在HDOJ里看到的最水的题目,至少目前为止. 题目里已经讲得很清楚了,模拟就能过 ...

  4. 【HDOJ】1022 Train Problem I_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=1022 [报告] 模拟,直接模拟一个栈的运行就行了. [程序] // Task: 1022 Train P ...

  5. 【HDOJ】1003 Max Sum_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=1003 [报告] 既然是子区间加和问题,可以用减法来处理.比如求[5..10]的和,可以直接用[1..10 ...

  6. 【HDOJ】4768 Flyer_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=4768 [报告] 题目中已经说了,保证最多出现一个奇数,所以可以用异或的想法.把所有的数异或起来,如果最后 ...

  7. 【HDOJ】4699 Editor_天涯浪子_新浪博客

    [题目] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [报告] 模拟题吧,本身不是很难. 最初的想法是用Splay tree写,然后疯掉了.苏牛说2B ...

  8. 【HDOJ】4704 Sum_天涯浪子_新浪博客

    [题目] http://acm.hdu.edu.cn/showproblem.php?pid=4704 [报告] S(K)显然就是N的K正整数划分数.所以SUM{S(K),1<=K<=N} ...

  9. 【HDOJ】1015 Safecracker_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=1015 [报告] 题目写的很长,忽略一系列废话,题意就是求一个方程v - w^2 + x^3 - y^4 ...

  10. 【HDOJ】1020 Encoding_天涯浪子_新浪博客

    [题目]http://acm.hdu.edu.cn/showproblem.php?pid=1020 [报告] 题意,是对字符串进行压缩,对字符串中连续字符变成数字+字符,比如BB变成2B,CCC变成 ...

最新文章

  1. TF-IDF模型的概率解释
  2. python基础课程_学习笔记13:标准库:有些收藏夹——sys
  3. little w and Segment Coverage(差分)
  4. 雷林鹏分享:C# 运算符
  5. Python Unittest参数化parameterized之数据驱动
  6. ppt转html5 带动画_这组PPT设计,真的太漂亮了!
  7. flutter去掉输入框最大字数显示
  8. webpack入坑之旅(一)不是开始的开始
  9. NWT失败反思:公司都死了,还怕得罪人
  10. 小米无线路由器经常连接不上网络连接服务器,小米路由器频繁掉线详细解决方法...
  11. websphere java和进程管理_Websphere 学习(一)
  12. tensorflow,pytorch中normalize方法
  13. linux 命令 tr 详解
  14. python算法_02字符串(罗马类型的转换整数)
  15. php 插件推荐,Typecho实用插件推荐(一)
  16. 超详细: Type-C接口Macbook笔记本无法充电(时连时断)的傻瓜处理流程
  17. 沐风:如何创造更多的睡后收入?
  18. 摄像头poe供电原理_监控摄像头poe供电维修方法
  19. Resource of computer vision, pattern recognition, machine learning etc.
  20. js读取本地文本文件,并生成Excel文件

热门文章

  1. 23号(一段很好的视频)
  2. C++和C#的性能比较
  3. Tuxera Ntfs for mac内核扩展批准不了怎么办 手动批准mac内核扩展
  4. Vegas的新功能——触摸编辑
  5. 【Flutter】Dart中的Mixins混入你知道是什么吗?
  6. iOS 实现语音播报
  7. MySQL - 查询今天的数据(以及昨天、本月、上个月、今年...)
  8. Solidity基础入门知识---函数的访问权限和可见性
  9. 【SpringMVC学习02】走进SpringMVC的世界
  10. TCP 协议学习小结