init tarray 太大_[NOIP 2001提高组T4]Car的旅行路线
[题目来源]:NOIP2001提高组T4
[关键字]:最短路径
[题目大意]:给定平面直角若干个矩形,计算(可经过其他矩形)两个矩形任意顶点间的最短路程费用。
//============================================================================================================
[分析]:其实题目本事没有太大的难点,只需要对每两个点进行连边(其实不用连知道坐标后现求两点间距离)然后求最短路即可。关键是如何知道给定三个顶点的矩形的另一个顶点。
公式:(x1,y1)(x2,y2)(x3,y3)为三个顶点坐标,如果(x1-x2)*(x3-x1)+(y1-y2)*(y3-y1)=0则x4=x2+x3-x1 y4=y2+y3-y1。只要循环直到找到第四个点即可,具体实现可看代码。
[代码]:
View Code
program project1;
type
rec = record
x, y, c: longint;
end;
var
n, tot, costf, st, ed, tc: longint;
pos: array[0..2000] of rec;
x, y: array[1..4] of longint;
costt: array[0..200] of longint;
b: array[0..200] of boolean;
d: array[0..100] of real;
procedure init;
var
i, j, k: longint;
begin
readln(n,costf,st,ed);
for i := 1 to n do
begin
readln(x[1],y[1],x[2],y[2],x[3],y[3],costt[i]);
for j := 1 to 3 do
for k := 1 to 3 do
if j <> k then
if (x[j]-x[k])*(x[6-k-j]-x[j])+(y[j]-y[k])*(y[6-k-j]-y[j]) = 0 then
begin
x[4] := x[k]+x[6-k-j]-x[j];
y[4] := y[k]+y[6-k-j]-y[j];
end;
for j := 1 to 4 do
begin
inc(tot);
pos[tot].x := x[j];
pos[tot].y := y[j];
pos[tot].c := i;
end;
end;
//for i := 1 to tot do writeln(pos[i].x,' ',pos[i].y,' ',pos[i].c);
end;
function dis(x, y: longint):real;
begin
dis := sqrt(sqr(pos[x].x-pos[y].x)+sqr(pos[x].y-pos[y].y));
if pos[x].c = pos[y].c then
dis := dis*costt[pos[x].c]
else dis := dis*costf;
end;
function dij(st: longint):real;
var
i, j, p: longint;
min: real;
begin
fillchar(b,sizeof(b),false);
fillchar(d,sizeof(d),100);
d[st] := 0;
for i := 1 to tot do
begin
min := 1e38;
for j := 1 to tot do
if (not b[j]) and (d[j] < min) then
begin
min := d[j];
p := j;
end;
b[p] := true;
for j := 1 to tot do
if not b[j] then
if d[j] > d[p]+dis(p,j) then d[j] := d[p]+dis(p,j);
end;
dij := 1e38;
for i := 1 to tot do
begin
if pos[i].c = ed then
for j := 0 to 3 do
if d[i+j] < dij then dij := d[i+j];
if pos[i].c = ed then break;
end;
end;
procedure work;
var
i, j: longint;
min, temp: real;
begin
min := 1e38;
for i := 1 to tot do
begin
if pos[i].c = st then
for j := 0 to 3 do
begin
temp := dij(i+j);
if temp < min then min := temp;
end;
if pos[i].c = st then break;
end;
writeln(min:0:1);
end;
begin
assign(input,'d:\in.txt');reset(input);
assign(output,'d:\out.txt');rewrite(output);
readln(tc);
while tc > 0 do
begin
init;
work;
dec(tc);
end;
close(input);
close(output);
end.
init tarray 太大_[NOIP 2001提高组T4]Car的旅行路线相关推荐
- NOIP 2018提高组复赛C/C++试题及答案详解
NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...
- NOIP 2013 提高组 货车运输
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- NOIP 2015 提高组 初赛
NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...
- NOIP 2017 提高组 初赛
NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...
- [NOIP 2013提高组]转圈游戏 题解
这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...
- NOIP 2008 提高组 复赛 message 传字条
NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...
- NOIP 2016 提高组 初赛
NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...
- for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题
问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...
- broken pipe怎么解决 数据太大_振动筛噪音太大、扬尘问题严重,不够环保怎么办?看看这篇文章,帮您解决困扰...
振动筛是一类重型筛分设备,具有产量大.结构简单.使用寿命长等特点.它在运行时不但产生机械噪声,而且由于矿石的筛分.转运和相互撞击等原因,还产生大量的粉尘,严重地污染作业环境,影响工人身体健康.本文分享 ...
最新文章
- 浅谈JVM的GC策略
- Java里的容器存放的元素必须是1个对象.
- 【转摘】Office三剑客之间的格式互换
- Android ListView与Arrayadapter之间的搭配使用
- arch linux 安装 arm,给树莓派安装 Arch Linux ARM
- Gradle Build速度加快终极方法(android studio)
- matlab第二次上机作业答案,第二次上机作业
- 电商网站模板_阿里云建站:模板建站与定制建站怎么选(小白参考)
- vim 命令模式 筛选_10个步骤的筛选器模式
- Markdown笔记神器Typora配置Gitee图床
- jsp中page指令用法详解
- dvi和hdmi 知乎_HDMI和DVI有什么区别? 哪个更好?
- Android AP 和 BP的概念
- Excel 使用ODBC直接访问
- mysql重复写入_MYSQL避免重复插入记录的三种方法
- 2022-08-15 第四小组 修身课 学习笔记(every day)
- croc使用 —(两个电脑间传输文件)
- 驱动级键盘记录器与安全密码框(能获取QQ密码)
- 修改注册表 去除Win7系统快捷方式箭头
- Java Web简答题