第一题: 穿越封锁线cross.pas/c/cpp

题目描述:

对于窃取情报和破译密码,Feli简直就是天才!

Feli知道我军3721整编军是我军一支重点培养的生力军,如果在这次行动中遭受损失,那对我军将是一个十分严重的实力打击。这么重要的消息,必须赶紧传达到指挥步!由于抗战期间交通十分落后,Feli只好委托Lucky连夜将该消息送达总部。接到委托,Lucky立即启程。

从情报站到指挥部之间有许多错综交叉的道路,道路和道路的交叉处都有地方可以供Lucky躲藏。由于这里是交通要道,敌人也对这个地带十分关注:他们会时不时对在某些道路上派人巡逻。虽然Lucky可以用精准的枪法将他们干掉,但是现在身负重任,不能打草惊蛇,所以必须避开他们。这意味着,如果某条道路有人巡逻,那么Lucky将无法穿过。时间紧迫,Lucky必须尽快到达总部。现在Lucky再次向你求助,他应该如何行走才能用最短的时间到达指挥部。

说明:在每个交叉路口,Lucky都能选择躲藏和行走。敌人的巡逻是周期循环的,他们总是以分钟为单位巡逻某条道路,在该分钟过去后离开。针对每条道路,我们假设Lucky总是刚好用1分钟时间走完。

针对下列数据:

V={1,2,3,4,5};  E={(1,2),(2,3),(3,4),(2,4),(4,5),(1,3),(3,5)}

结点1为情报站,5为指挥部,其余为交叉路口。

周期为4分钟。

每个周期的第1分钟有巡逻的边为{(1,2),(2,4),(4,5)}

每个周期的第2分钟有巡逻的边为{(1,3),(2,3),(3,5)}

每个周期的第3分钟有巡逻的边为{(3,4),(4,5)}

每个周期的第4分钟没有巡逻边。

这样,Lucky可以在第一分钟走边(1,3),第二分钟躲藏,第3分钟走边(3,5),消耗3分钟,时间最短。

数据说明:

每组输入数据第一行有2个整数n和m(1≤n≤100; 1≤m≤500),代表地图有n个结点m条边。1号结总是代表情报站,n号结点总是代表指挥部。

接下去m行是对地图的描述,每行有2个小于n的整数,分别代表一条边两端的结点编号。(如果边被重复描述,仍表示只有一条边)。

再接下去一行有一个整数k(0≤k≤10)代表周期长度。

后来的数据都是对周期巡逻边的描述,每行有2个整数,表示被关注的边。0 0则表示对周期中某一分钟的巡逻边描述结束。数据保证在该段恰存在k个0 0。

输出数据仅有一行,如果Lucky可以到达指挥部,则输出到达指挥部的最短时间。如果不能到达则输出“No solution.”

样例输入(cross.in):

5 7

1 2

2 3

3 4

2 4

4 5

1 3

3 5

4

1 2

2 4

4 5

0 0

1 3

2 3

3 5

0 0

3 4

4 5

0 0

0 0

样例输出(cross.out):

3

一开始思路是对的,但是初值赋错了,只过了4个点。

程序写的很乱,变量名很不科学。

var
 n,m,k:longint;
 a:array[1..500+1,1..500+1,0..10+1]of longint;
 d:array[1..100+1,0..10+1]of longint;
 mark:array[1..100+1,0..10+1]of boolean;

procedure init;
var
 i,x,y:longint;
begin
 read(n,m);
 for i:=1 to m do
   begin
   read(x,y);
   a[x,y,0]:=1;
   a[y,x,0]:=1;
   end;
 read(k);
 for i:=1 to k do
  begin
  while true do
   begin
   read(x,y);
   if (x=0)and(y=0) then break;
   a[x,y,i]:=-1;
   a[y,x,i]:=-1;
   end;
  end;
end;

procedure main;
var
 i,j,kk,kkk,min,mini:longint;
begin
 for i:=2 to 100+1 do
  for j:=0 to 11 do d[i,j]:=maxlongint div 2;
 fillchar(mark,sizeof(mark),0);
 for j:=1 to 11 do begin d[1,j]:=j;  end;

while true do
  begin
     min:=maxlongint div 2;
     for i:=1 to n do
      for j:=0 to k do
      if (d[i,j]<min)and(mark[i,j]=false) then begin min:=d[i,j]; mini:=i; kk:=j; end;
     if min=maxlongint div 2 then exit;
     mark[mini,kk]:=true;

if k<>0 then kkk:=(kk) mod k+1
          else kkk:=0;

for i:=1 to n do
   if not mark[i,kkk] then
   if (a[mini,i,0]+a[mini,i,kkk]>0) and(d[mini,kk]+1<d[i,kkk]) then
     begin
     d[i,kkk]:=d[mini,kk]+1;
     for j:=kkk+1 to k do
      if d[i,kkk]+(j-kkk)<d[i,j] then d[i,j]:=d[i,kkk]+j-kkk;
     for j:=1 to kkk-1 do
      if d[i,kkk]+(j-kkk+k)<d[i,j] then d[i,j]:=d[i,kkk]+j-kkk+k;
     end;
  end;
end;

procedure print;
var
 i,min:longint;
begin
 min:=maxlongint div 2;
 for i:=0 to k do
  if d[n,i]<min then min:=d[n,i];

if min=maxlongint div 2 then writeln('No solution.')
 else
 write(min);
end;

begin
 assign(input,'cross.in');
 assign(output,'cross.out');
 reset(input);
 rewrite(output);
 init;
 main;
 print;
 close(input);
 close(output);
end.

2012年复赛综合训练(一):第一题:nbsp;…相关推荐

  1. NOIP2010-普及组复赛模拟试题-第一题-手机

    题目背景 Background 现在手机使用越来越广泛了  题目描述 Description 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一下会 ...

  2. NOIP2012复赛 普及组 第一题

    1.5 编程基础之循环控制 43 质因数分解 http://noi.openjudge.cn/ch0105/43/ #include <bits/stdc++.h> using names ...

  3. NOIP2016普及组复赛第一题的AC程序加题解pascal

    P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔.商店不允许 ...

  4. 问题 H: 方块填数(2012年蓝桥决赛第5题--dfs)

    问题 H: 方块填数(2012年蓝桥决赛第5题) 时间限制: 1 Sec 内存限制: 128 MB [提交][状态][讨论版] 题目描述 "数独"是当下炙手可热的智力游戏.一般认为 ...

  5. 2012-2018普及组第一题题解

    noip2018 标题统计 [题目描述] 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大.小写英文字母.数字字符.空格和换行符.统计标题字符数时,空格和换行符不计 ...

  6. 当计算机运行死机时 可按,2012年会计电算化考试-理论题及答案I套

    <2012年会计电算化考试-理论题及答案I套>由会员分享,可在线阅读,更多相关<2012年会计电算化考试-理论题及答案I套(8页珍藏版)>请在人人文库网上搜索. 1.2012年 ...

  7. 2012河北省职称计算机题,2012河北省职称计算机基础知识题库

    2012河北省职称计算机基础知识题库 下列关于光盘特点的叙述中,正确的是________. A.光盘存储容量小 B.光盘位价格低 C.光盘携带不便 D.光盘读写速度很低 [正确答案:]B 下列选项中, ...

  8. 2012-2020蓝桥C++ B组蓝桥杯省赛真题(第一题)

    http://t.csdn.cn/zTemz   原文链接 目录 2012 第一题:微生物增殖 2013第一题:高斯日记 2014第一题:啤酒和饮料 2015第一题:奖券数目 2016 第一题:煤球数 ...

  9. 四川大学线下编程比赛第一题:数字填充

    四川大学线下编程比赛第一题:数字填充 公布公司: 有 效 期: CSDN 2014-09-27至2015-09-26 难 度 等 级: 答 题 时 长: 编程语言要求: 120分钟 C C++ Jav ...

最新文章

  1. plotly自定义股票数据绘图
  2. “大树底下”的阿里电商 淘品牌的“配角变名角”
  3. 字符串基础类型拓宽的操作,转换成整数值
  4. c++面向对象高级编程 学习十一 类模板、函数模板、成员模板
  5. php mysql bootstart_PHP MySQL 创建数据库
  6. javascript复制到黏贴板之完美兼容
  7. oc和java_oc与java c++语法区别
  8. 转换预定义的字符为html实体,php把一些预定义的 HTML 实体转换为字符。
  9. java数组有顺序吗_java – 使用特定顺序对(数组)列表进行排序
  10. Java实现redis事务
  11. snipaste安装和使用_snipaste替代品 amp; linux截图解决方案-截图、贴图工具Flameshot...
  12. python建立数据库连接时出错_python – 尝试连接到localhost上的数据库时出现pyodbc连接错误...
  13. oracle+调整+表空间,oracle数据库表空间及权限调整示例
  14. VS2008下easyMule-VeryCD源代码的编译
  15. 如何在阿里云国际上设置邮箱主机
  16. 易我数据恢复向导 v2.0 官网
  17. 西瓜决策树-ID3算法
  18. Delphi与JAVA 互通AES文件加解密源码(支持D6-XE10)
  19. 比尔·盖茨买百万亩农地成美“头号地主”,图扑数字孪生农场
  20. MATLAB 正态(高斯)分布概率密度函数

热门文章

  1. Window10怎么清理电脑的虚拟内存以及查询系统激活状态
  2. Java 图像处理教程(人脸检测,添加水印,图像颜色转换)
  3. 【微信小程序】微信小程序入门与实战-个人笔记
  4. Windows一键更换系统字体noMeiryoUI 2.41
  5. ATM机等待时间详细代码和解释
  6. matlab韦伯分布,MATLAB如何使用wblpdf函数计算韦伯分布的概率密度
  7. Web阅读器开发系列教程(入门篇)
  8. 心态-《重塑心灵》书中的精髓:了解NLP,重塑健康心灵。
  9. 基于内容的菜谱推荐系统
  10. Java应用程序生成JAR包,部署到Hadoop平台上运行