信息战(七)——情报传递

Time Limit: 3000ms
Memory Limit: 262144KB

64-bit integer IO format: %lld      Java class name: Main

 
虽说现在是信息战,但是有些情报却是不能通过计算机进行传递的。所以呢,C国的情报员LZM在这种情况下就派上用场了,LZM可是情报界的神牛。(Orz,拜一个先~)所谓神牛见首不见尾(那位同学你说啥?神龙?可以活用嘛,给个面子哈……),作为一名优秀的情报员,LZM在传递情报的时候是需要避免让任何人看见的,尤其是A国的巡逻塔。
某日,LZM获得了一份关于A国的重要情报,他需要在最短的时间内把这份情报传递到司令部。我们假设现在LZM位于地图的(X,Y)点,而司令部位于(M,N)点,LZM在单位时间内只能往东南西北四个方向移动一个单位距离,地图上有若干个A国军队的哨塔,哨塔所在坐标以及它东西南北四个方向相邻的坐标都属于监视范围,如果LZM踏入那些区域就会被发现。定义LZM到司令部所需的最短时间为没有任何哨塔时LZM到司令部的最短时间。LZM想知道在有哨塔的情况下有多少种行走方法可以让他在最短时间内到达司令部。

 

Input

第一行:一个整数K,代表数据组数。
对于每一组数据:
第一行:四个整数,对应题目中的X、Y、M、N,范围均为[0,200]。
第二行:一个整数P(0<=P<M*N),代表哨塔个数。
第三~P+2行:两个整数I、J代表哨塔位置,范围均为[0,200]。

 

Output

对于每一组输出一个数,表示行走方法种数。

 

Sample Input

  1. 2
  2. 0 0 5 5
  3. 2
  4. 3 3
  5. 5 2
  6. 5 5 3 3
  7. 1
  8. 4 4

Sample Output

  1. 11
  2. 0

Source

Author

51isoft
 
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF = 0x3f3f3f3f;
  4. const int maxn = ;
  5. const int dir[][] = {-,,,,,-,,};
  6. #define MAXN 200
  7. struct HP {
  8. int len,s[MAXN];
  9. HP() {
  10. memset(s,,sizeof(s));
  11. len=;
  12. }
  13. HP operator =(const char *num) { //字符串赋值
  14. len=strlen(num);
  15. for(int i=; i<len; i++) s[i]=num[len-i-]-'';
  16. }
  17.  
  18. HP operator =(int num) { //int 赋值
  19. char s[MAXN];
  20. sprintf(s,"%d",num);
  21. *this=s;
  22. return *this;
  23. }
  24.  
  25. HP(int num) {
  26. *this=num;
  27. }
  28.  
  29. HP(const char*num) {
  30. *this=num;
  31. }
  32.  
  33. string str()const { //转化成string
  34. string res="";
  35. for(int i=; i<len; i++) res=(char)(s[i]+'')+res;
  36. if(res=="") res="";
  37. return res;
  38. }
  39.  
  40. HP operator +(const HP& b) const {
  41. HP c;
  42. c.len=;
  43. for(int i=,g=; g||i<max(len,b.len); i++) {
  44. int x=g;
  45. if(i<len) x+=s[i];
  46. if(i<b.len) x+=b.s[i];
  47. c.s[c.len++]=x%;
  48. g=x/;
  49. }
  50. return c;
  51. }
  52. void clean() {
  53. while(len > && !s[len-]) len--;
  54. }
  55.  
  56. HP operator *(const HP& b) {
  57. HP c;
  58. c.len=len+b.len;
  59. for(int i=; i<len; i++)
  60. for(int j=; j<b.len; j++)
  61. c.s[i+j]+=s[i]*b.s[j];
  62. for(int i=; i<c.len-; i++) {
  63. c.s[i+]+=c.s[i]/;
  64. c.s[i]%=;
  65. }
  66. c.clean();
  67. return c;
  68. }
  69.  
  70. HP operator - (const HP& b) {
  71. HP c;
  72. c.len = ;
  73. for(int i=,g=; i<len; i++) {
  74. int x=s[i]-g;
  75. if(i<b.len) x-=b.s[i];
  76. if(x>=) g=;
  77. else {
  78. g=;
  79. x+=;
  80. }
  81. c.s[c.len++]=x;
  82. }
  83. c.clean();
  84. return c;
  85. }
  86. HP operator / (const HP &b) {
  87. HP c, f = ;
  88. for(int i = len-; i >= ; i--) {
  89. f = f*;
  90. f.s[] = s[i];
  91. while(f>=b) {
  92. f =f-b;
  93. c.s[i]++;
  94. }
  95. }
  96. c.len = len;
  97. c.clean();
  98. return c;
  99. }
  100. HP operator % (const HP &b) {
  101. HP r = *this / b;
  102. r = *this - r*b;
  103. return r;
  104. }
  105.  
  106. HP operator /= (const HP &b) {
  107. *this = *this / b;
  108. return *this;
  109. }
  110.  
  111. HP operator %= (const HP &b) {
  112. *this = *this % b;
  113. return *this;
  114. }
  115.  
  116. bool operator < (const HP& b) const {
  117. if(len != b.len) return len < b.len;
  118. for(int i = len-; i >= ; i--)
  119. if(s[i] != b.s[i]) return s[i] < b.s[i];
  120. return false;
  121. }
  122.  
  123. bool operator > (const HP& b) const {
  124. return b < *this;
  125. }
  126.  
  127. bool operator <= (const HP& b) {
  128. return !(b < *this);
  129. }
  130.  
  131. bool operator == (const HP& b) {
  132. return !(b < *this) && !(*this < b);
  133. }
  134. bool operator != (const HP &b) {
  135. return !(*this == b);
  136. }
  137. HP operator += (const HP& b) {
  138. *this = *this + b;
  139. return *this;
  140. }
  141. bool operator >= (const HP &b) {
  142. return *this > b || *this == b;
  143. }
  144.  
  145. };
  146.  
  147. istream& operator >>(istream &in, HP& x) {
  148. string s;
  149. in >> s;
  150. x = s.c_str();
  151. return in;
  152. }
  153.  
  154. ostream& operator <<(ostream &out, const HP& x) {
  155. out << x.str();
  156. return out;
  157. }
  158. int dp[maxn][maxn],sx,sy,m,n,p;
  159. HP cnt[maxn][maxn];
  160. bool isIn(int x,int y) {
  161. return x >= && y >= && x < && y < ;
  162. }
  163. struct node {
  164. int x,y;
  165. node(int x = ,int y = ) {
  166. this->x = x;
  167. this->y = y;
  168. }
  169. };
  170. queue<node>q;
  171. void bfs() {
  172. while(!q.empty()) q.pop();
  173. if(dp[sx][sy] == -) {
  174. dp[sx][sy] = ;
  175. cnt[sx][sy] = ;
  176. q.push(node(sx,sy));
  177. }
  178. while(!q.empty()) {
  179. node now = q.front();
  180. q.pop();
  181. if(now.x == m && now.y == n && dp[now.x][now.y] != abs(m - sx) + abs(n - sy)) break;
  182. for(int i = ; i < ; ++i) {
  183. int nx = now.x + dir[i][];
  184. int ny = now.y + dir[i][];
  185. if(!isIn(nx,ny) || dp[nx][ny] == INF) continue;
  186. if(dp[nx][ny] == - || dp[nx][ny] > dp[now.x][now.y] + ) {
  187. dp[nx][ny] = dp[now.x][now.y] + ;
  188. cnt[nx][ny] = cnt[now.x][now.y];
  189. q.push(node(nx,ny));
  190. } else if(dp[nx][ny] == dp[now.x][now.y] + ) {
  191. cnt[nx][ny] += cnt[now.x][now.y];
  192. }
  193. }
  194. }
  195. }
  196. int main() {
  197. int x,y,kase;
  198. scanf("%d",&kase);
  199. while(kase--) {
  200. scanf("%d%d%d%d",&sx,&sy,&m,&n);
  201. scanf("%d",&p);
  202. memset(dp,-,sizeof dp);
  203. memset(cnt,,sizeof cnt);
  204. while(p--) {
  205. scanf("%d%d",&x,&y);
  206. dp[x][y] = INF;
  207. for(int i = ; i < ; ++i) {
  208. int nx = x + dir[i][];
  209. int ny = y + dir[i][];
  210. if(!isIn(nx,ny)) continue;
  211. dp[nx][ny] = INF;
  212. }
  213. }
  214. bfs();
  215. if(dp[m][n] != abs(m - sx) + abs(n - sy)) cnt[m][n] = ;
  216. cout<<cnt[m][n]<<endl;
  217. }
  218. return ;
  219. }

BNUOJ 1021 信息战(七)——情报传递的更多相关文章

  1. BNUOJ 1006 Primary Arithmetic

    Primary Arithmetic 来源:BNUOJ 1006http://www.bnuoj.com/v3/problem_show.php?pid=1006 当你在小学学习算数的时候,老师会教你 ...

  2. 【Beta阶段】第七次Scrum Meeting!

    每日任务内容: 本次会议为第七次Scrum Meeting会议~ 由于本次会议项目经理召开时间为10:00,在宿舍召开,召开时长约20分钟. 队员 昨日完成任务 明日要完成任务 刘乾 #177(未完成 ...

  3. 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC

    本文部分内容翻译自 Practical-Cryptography-for-Developers-Book,笔者补充了密码学历史以及 openssl 命令示例,并重写了 RSA/ECC 算法原理.代码示 ...

  4. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...

  5. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. 《LoadRunner12七天速成宝典》来了

    看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...

  7. 【SAP业务模式】之ICS(七):IDOC配置

    这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...

  8. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  9. Nodejs之MEAN栈开发(七)---- 用Angular创建单页应用(下)

    上一节我们走通了基本的SPA基础结构,这一节会更彻底的将后端的视图.路由.控制器全部移到前端.篇幅比较长,主要分页面改造.使用AngularUI两大部分以及一些优化路由.使用Angular的其他指令的 ...

随机推荐

  1. SQL server用到的SQL语句备份下

    这是触发器用于关联条件的 -------------1-------------- set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER trigger ...

  2. 【转】SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系 .

    相信大多数java初学者被这些概念搞蒙过,它们之间到底有什么区别,又有什么联系呢?下面我将一一解开大家心中的谜团. 首先,给大家解释一下这些概念: 1.SDK(Software DevelopKit, ...

  3. E20170627-gg

    ring   n. 戒指,指环; 铃声,钟声; 环形物; 拳击场;   vi. 按铃,敲钟; 回响; 成环形; rear   n. 后部,背面,背后; 臀部; (舰队或军队的) 后方,后尾,殿后部队; ...

  4. eclipse下整合springboot和mybatis

    1.新建maven项目 先新建一个maven项目,勾选上creat a simple project,填写groupid,artifactid 2.建立项目结构 3.添加依赖 <parent&g ...

  5. POI上传Excel的小问题处理

    package com.platform.utils.excel; import com.platform.utils.RRException; import org.springframework. ...

  6. iis 服务器而配置php运行环境

    第一步 下载php 下载压缩包就可以了 第二步 解压缩php到某个目录,比如D:\php php目录里面有两个php.ini,一个是php.ini-dist,比较适合开发用:一个是php.ini-re ...

  7. 题解报告:hdu 1575 Tr A

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的 ...

  8. Spring Web MVC核心架构

    可以查看DispatherServlet中的源代码,就是doDispatch()方法!

  9. Spark SQL入门案例之人力资源系统数据处理

    通过该案例,给出一个比较完整的.复杂的数据处理案例,同时给出案例的详细解析. 人力资源系统的管理内容组织结构图 1) 人力资源系统的数据库与表的构建. 2) 人力资源系统的数据的加载. 3) 人力资源 ...

  10. [ USACO 2018 OPEN ] Out of Sorts (Gold)

    \(\\\) \(Description\) 运行以下代码对一长为\(N\)的数列\(A\)排序,不保证数列元素互异: cnt = 0 sorted = false while (not sorted ...