1827:【01NOIP提高组】Car的旅行路线
哇这些真题终于正经起来奥
刚看这道题很不自信觉得自己肯定不能建图成功甚至想过用贪心。。
后来一想发现建图还是蛮容易的,AI我是真的蠢
话说一本通真的很坑啊,把原题的保留1位改成了2
我把在洛谷AC的代码交上去查了好久才发现。。
(话说为什么把读入优化换成scanf效率快了一千倍。。)
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,s,t,A,B,T[maxn<<];
double dis[maxn<<];
bool book[maxn<<];
/*inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') if(ch=='-') f=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}*/
struct data{
int city;
int x,y;
}a[maxn<<];
inline int power_2(int x)
{
return x*x;
}
void getlast(int x1,int y1,int x2,int y2,int x3,int y3,int i)
{
int x4,y4;
int dis1=power_2(x1-x2)+power_2(y1-y2),
dis2=power_2(x1-x3)+power_2(y1-y3),
dis3=power_2(x2-x3)+power_2(y2-y3);
if(dis2==dis1+dis3) x4=x3-x2+x1,y4=y3+y1-y2;
if(dis1==dis2+dis3) x4=x2-x3+x1,y4=y2+y1-y3;
if(dis3==dis1+dis2) x4=x3-x1+x2,y4=y3+y2-y1;
a[i+].x=x4;a[i+].y=y4;
}//这道题目唯一需要注意的点大概就是这个求第四个点
inline double distance(int x1,int y1,int x2,int y2)
{
return sqrt(power_2(x1-x2)+power_2(y1-y2));
}
void SPFA()
{
memset(book,,sizeof(book));
queue <int> q;
for(int i=;i<=s<<;i++) dis[i]=;
for(int i=A*-;i<=A*;i++) dis[i]=,q.push(i),book[i]=;
while(!q.empty())
{
int u=q.front();q.pop();book[u]=;
for(int i=;i<=s<<;i++)
{
if(i==u) continue;
double cost=distance(a[i].x,a[i].y,a[u].x,a[u].y);
if(a[i].city==a[u].city) cost*=T[a[i].city];
else cost*=t;
if(dis[i]>dis[u]+cost)
{
dis[i]=dis[u]+cost;
if(!book[i])
{
book[i]=;
q.push(i);
}
}
}
}
}
void init()
{
//memset(t,0,sizeof(t));
memset(a,,sizeof(a));
scanf("%d%d%d%d",&s,&t,&A,&B);
int i;
for(i=;i<=s<<;i+=)
{
//int x1,x2,x3,y1,y2,y3;
scanf("%d%d%d%d%d%d%d",&a[i].x,&a[i].y,&a[i+].x,&a[i+].y,&a[i+].x,&a[i+].y,&T[i/+]);
a[i].city=a[i+].city=a[i+].city=a[i+].city=i/+;
getlast(a[i].x,a[i].y,a[i+].x,a[i+].y,a[i+].x,a[i+].y,i);
}
}
int main()
{
scanf("%d",&n);
int i;
for(i=;i<=n;i++)
{
init();
SPFA();
double ans=dis[B<<];
for(int j=B*-;j<B*;j++) if(ans>dis[j]) ans=dis[j];
printf("%.2lf\n",ans);
}
return ;
}
1827:【01NOIP提高组】Car的旅行路线的更多相关文章
- 【noip 2012】提高组Day1T3.开车旅行
Description 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市 ...
- NOIP2012提高组D1T3 开车旅行
n<=100000个山,每个山有高度,从一个山到另一个山代价为高度差,有A和B两人一起开车,A每次选前进方向的次近山,B选最近,保证山高度不同且如果代价相同的山低的代价算小,每次旅行先A走,然后 ...
- 【NOIP2012提高组】开车旅行 倍增
题目分析 朴素的做法就是预处理下一个目的地,然后跑模拟,超时. 本题最重要的考点是倍增优化.设$fa[i][j]$表示a从i出发行驶$2^j$“次”后行驶的路程,$fb[i][j]$表示从i出发行驶$ ...
- 1825:【01NOIP提高组】数的划分
#include<bits/stdc++.h> using namespace std; ],tot; void dfs(int num,int pos) { if(pos==k) ]) ...
- [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)
最短路,这个不难想,但是要为它加边就有点麻烦..还好写完就过了(虽然WA了一次,因为我调试用的输出没删了..),不然实在是觉得挺难调的.. ------------------------------ ...
- [NOIP2012] 提高组 洛谷P1081 开车旅行
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...
- 开车旅行 2012年NOIP全国联赛提高组(倍增+set)
开车旅行 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小A 和小B决定利用 ...
- [NOIp2018提高组]旅行
[NOIp2018提高组]旅行: 题目大意: 一个\(n(n\le5000)\)个点,\(m(m\le n)\)条边的连通图.可以从任意一个点出发,前往任意一个相邻的未访问的结点,或沿着第一次来这个点 ...
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行
[NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...
随机推荐
- 13 个 JS 数组精简技巧
来自 https://juejin.im/post/5db62f1bf265da4d560906ab 侵删 数组是 JS 最常见的一种数据结构,咱们在开发中也经常用到,在这篇文章中,提供一些小技巧,帮 ...
- vue打包后.woff字体文件路径问题处理
在执行 npm run build 命令打包后,如果出现 .woff 等字体文件找不到的情况 通过设置 vue-style-loader 打包前缀路径解决
- js时间格式化和相互转换
1. Thu Mar 07 2019 12:00:00 GMT+0800 (中国标准时间) 转换为 2019-03-07 12:00:00 const d = new Date(Thu Mar 07 ...
- js控制台不同的打印方式
在控制台单个输出: console.log(...):值 console.info(...):信息 console.debug(...):调试信息 console.warn(...):警告信息 con ...
- git使用方法(持续更新)
2018/5/9 最基本的操作: 添加文件.文件夹.所有文件: git add test.py //添加单个文件 git add src //添加文件夹 git add . ...
- AD19新功能之跟随走线
跟随走线 AD19新增跟随走线,比如需要按照特定的轨迹进行走线,比如要绕着一个圆进行走线,或者靠着边框走线,普通模式下的效果如下图所示,线会跟着指针跑: 在走线模式下,按住 shift + f ,然后 ...
- cuda环境搭建
cuda环境搭建 cuda 的安装 一篇很不错的博客 https://blog.csdn.net/u014529295/article/details/78766258 另外官网也有介绍 https: ...
- Codeforces Round #512 (Div. 2) D. Vasya and Triangle(几何+思维)
题目 题意: 给出 n,m,k ,让你在长为 n,宽为 m 的坐标系里构建一个三角形,使得面积= n*m/k.如果存在,输出“YES”,输出三角形三个顶点的坐标: 如果不存在,输出“NO”. 思路: ...
- JVM堆空间用途分析与划分依据
在上一次[https://www.cnblogs.com/webor2006/p/9876493.html]已经对JVM的内存空间的划分进行了理论化的学习,这次还是对上一次提到的理论进行进一步的补充, ...
- php版网站站打包程序【配合webshell】(原创)
因为大马只能下载一些单文件,无法下载文件夹里的文件,所以花费一些时间写了一个PHP脚本,打包全站数据,在此分享!切勿做违法事情! 使用方法: 1.将该程序上传到网站的目录下,如/zip.php : 2 ...