飞翔 noip提高组难度
背景
鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧。于是,他们决定举办一场比赛,比赛的地方将在一个迷宫之中。
题目
这些鹰的起始点被设在一个N*M矩阵的左下角map[1,1]的左下角。终点被设定在矩阵的右上角map[N,M]的右上角,有些map[i,j]是可以从中间穿越的。每一个方格的边长都是100米。如图所示:
没有障碍,也没有死路。这样设计主要是为了高速飞行的鹰们不要发现死路来不及调整而发生意外。潘帕斯雄鹰冒着减RP的危险从比赛承办方戒备森严的基地中偷来了施工的地图。但是问题也随之而来,他必须在比赛开始之前把地图的每一条路都搞清楚,从中找到一条到达终点最近的路。(哈哈,笨鸟不先飞也要拿冠军)但是此鹰是前无古鹰,后无来鹰的吃菜长大的鹰--菜鸟。他自己没有办法得出最短的路径,于是紧急之下找到了学OI的你,希望找到你的帮助。
输入
首行为n,m(0<n,m<=100000),第2行为k(0<k<=1000)表示有多少个特殊的边。以下k行为两个数,i,j表示map[i,j]是可以直接穿越的。
输出
仅一行,1,1-->n,m的最短路径的长度,四舍五入保留到整数即可
样例输入
3 2
3
1 1
3 2
1 2
样例输出
383
来源
@潘帕斯雄鹰经典问题改编
解题报告:
其实就是最长上升子序列的一个变形,要走最短路就一定要尽可能地走特殊的路,所以先将这些路按照x[i] y[i]排序后,进行一次最长上升子序列就行了,蓝书里面有一道一模一样的题目。
ac程序:
var n,m,i,j,k,sum:longint;
x,y,f:array[0..1000] of longint;
procedure qsort(l,r:longint);
var i,j,now,temp,temp2:longint;
begin
i:=l; j:=r; temp:=x[(l+r) div 2]; temp2:=y[(l+r) div 2];
repeat
while (x[i]<temp) or ((x[i]=temp) and (y[i]<temp2)) do
inc(i);
while (x[j]>temp) or ((x[j]=temp) and (y[j]>temp2)) do
dec(j);
if i<=j then
begin
now:=x[i]; x[i]:=x[j]; x[j]:=now;
now:=y[i]; y[i]:=y[j]; y[j]:=now;
inc(i); dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
begin
assign(input,'p4.in'); assign(output,'p4.out');
reset(input); rewrite(output);
readln(n,m);
readln(k);
for i:=1 to k do
readln(x[i],y[i]);
qsort(1,k);
{for i:=1 to k do
writeln(x[i],' ',y[i]);}
for i:=1 to k do
begin
f[i]:=1;
for j:=1 to i-1 do
if (x[i]>x[j]) and (y[i]>y[j]) then
f[i]:=max(f[i],f[j]+1);
end;
for i:=1 to k do
if f[i]>sum then sum:=f[i];
writeln(round((n+m-2*sum+sum*sqrt(2))*100));
close(input); close(output);
end.
飞翔 noip提高组难度相关推荐
- 第一届『Citric杯』NOIP提高组模拟赛 题解
[官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
- BZOJ刷题记录---提高组难度
BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...
- 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)
信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...
- {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C
2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...
- 6271. 2019.8.4【NOIP提高组A】锻造 (forging)
6271. 2019.8.4[NOIP提高组A]锻造 (forging) (File IO): input:forging.in output:forging.out Time Limits: 15 ...
- 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结
2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...
- NOIP 提高组 复赛 历年 试题
NOIP 提高组 复赛 历年 试题 NOIP 2017 提高组 复赛 试题 https://wenku.baidu.com/view/70de9e29854769eae009581b6bd97f ...
- NOIP提高组1890~1900集合答案(之前的文章标题错了,应该是1820开始的,不是1520开始的)
1890:[15NOIP提高组]跳石头时间限制: 1000 ms 内存限制: 131072 KB 提交数: 1037 通过数: 561 [题目描述] 这项比赛将在一条笔直的河道中进行,河道中分布着一些 ...
最新文章
- C#中静态方法的运用和字符串的常用方法(seventh day)
- python导入模块有同名_Python:导入与函数同名的模块
- 【学习笔记】Android 图像处理
- MySQL【案例讲解】单行函数
- c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联
- android 的属性动画
- Java 中实现定时服务 在ssh框架中跟普通工程里面创建的方式
- Source Map调试压缩后代码
- 小一爬取了 14455 个已发行基金,到底能分析点啥出来?
- css中visibility与display的区别
- JavaScript练习
- C语言程序设计 数据类型 知识总结
- Python实现基于模块的库存管理系统
- 多张eps合并成一张
- Material Dialogs的使用
- 计算机开机后桌面放大,开机后桌面图标变大 桌面图标变大了怎么处理?
- java如何对list进行深度复制
- 最近在论证一个问题,到底是先有鸡还是先有蛋:
- 二、伊森商城 环境 虚拟机配置 p3
- 计蒜客 428(人人都有极客精神-日期问题)