POJ 3072 Robot (最短路)

SQL中的时间计算:员工每日工作时长 摘要:本文介绍了一个使用SQL查询计算员工每日工作时长的实用方法。通过分析包含员工打卡记录的数据库表,利用CTE(公共表表达式)将日期分组,计算最早和最晚打卡时间差,最终以"小时:分钟"格式输出工作时长。该方法适用于每日两次打卡的场景,并提示了处理漏打卡等特殊情况时的注意事项,为企业考勤管理提供了有效的数据支持方案。(148字) 阅读详情

题目连接:http://poj.org/problem?id=3072

题意:在平面上,给出R,N,意思有N个点,点与点之间的权值就是两点之间的距离,机器人每次移动的距离不超过R。开始时机器人面向第N个点,当机器人要移动到点X(i,j)是,必须面向该点,如果此时没有面向南点X(i,j),就需要转移角度去面向它,需要的时间就是转移的角度,输出从1到N的最短时间,如果到达不了,输出impossible。

参考代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;

#define N 205  //顶点的个数
#define SIZE 20005 //边的个数
#define INF 1e-10
#define CLR(arr,v) memset(arr,v,sizeof(arr))
const double INS = 1 << 29 ;
const double P = 180.0/acos(-1.0) ;


struct Point{
	double x,y;
}po[N];

double ang[N][N],pre[N];  //pre[i]存的是从父节点到i点的角度

void slove(int r,int n);
double dist(Point ,Point);
double deg(double ,double);

class short_path{
public:
	short_path(){}
	void init(int m,int n){
		num_ed = m;num_v = n;
		CLR(des,0);CLR(next,0); CLR(h,0);
		for(int i = 0;i < N;++i)
			dis[i] = INS;
		while(!q.empty()) q.pop();
	}
	void add(int u,int v,double f){
		des[++pos] = v;
		val[pos] = f;
		next[pos] = h[u];
		h[u] = pos;
	}
	int Dijkstra(int start,int end){
		double degree;
		dis[start] = 0;
		mid.d = start;
		mid.v = 0;
		q.push(mid);
		while(!q.empty()){
			int s = q.top().d;
			double v = q.top().v;
			q.pop();
			for(int i = h[s]; i ;i = next[i]){
				degree = deg(pre[s],ang[s][ des[i] ]);  //夹角
				if(dis[s] + val[i] + degree < dis[ des[i] ]){
					dis[ des[i] ] = dis[s] + val[i] + degree;
					mid.d = des[i];
					mid.v = dis[ des[i] ];
					pre[ des[i] ] = ang[s][ des[i] ];
					q.push(mid);
				}
			}
		}
		return fabs(dis[end]  - INS) < INF ? -1 : (int)(dis[end] + 0.5);
	}
private:
	int h[N],des[SIZE],next[SIZE];
	double dis[N],val[SIZE];
	int pos,num_ed,num_v,res;
	struct Edge{
		int d;
		double v;
		bool operator<(const Edge &ed) const{
			return v > ed.v;
		}
	};
	struct Edge mid;
	priority_queue<Edge> q;
}sp;

double dist(Point a,Point b){  //计算距离
	return sqrt((b.y - a.y)*(b.y - a.y) + (b.x - a.x)*(b.x - a.x));
}

double deg(double s,double e){ //计算夹角
	double sum = fabs(s - e) * P;
	if(360.0 - sum < INF ) sum -= 360.0;
	if(180.0 - sum < INF ) sum = 360.0 - sum;
	return sum;
}

void init(){
	CLR(ang,0); CLR(po,0);
	CLR(pre,0); 
}

void slove(double r,int n){
	sp.init(n,n);
	for(int i = 1;i <= n;++i)
		scanf("%lf%lf",&po[i].x,&po[i].y);
	double d ;
	for(int i = 1;i <= n;++i)
		for(int j = i + 1;j <= n;++j){
			ang[i][j] = atan2(po[i].y - po[j].y,po[i].x - po[j].x);
			ang[j][i] = atan2(po[j].y - po[i].y,po[j].x - po[i].x);
			d = dist(po[i],po[j]) ;
			if(d - r < INF){  //判断是否可走
				sp.add(i,j,d);
				sp.add(j,i,d);
			}
		}
	int res = -1;
	pre[1] = ang[1][n];
	res = sp.Dijkstra(1,n);
	if(res == -1) 
		printf("impossible\n");
	else 
		printf("%d\n",res);
}

int main()
{
	int n;
	double r;
	while(~scanf("%lf%d",&r,&n),(r > -1 && n > -1)){
		slove(r,n);
	}
	return 0;
}          


Spring Boot:如何快速搭建一个高性能微服务架构? 通过本文的详细步骤,我们成功搭建了一个高性能的微服务架构。Spring Boot 和 Spring Cloud 提供了强大的工具链,使得开发者能够快速实现服务注册与发现、负载均衡、熔断器与降级机制等功能。同时,通过数据库连接池、Redis 缓存和异步处理等优化手段,进一步提升了系统的性能和可靠性。希望本文能够帮助你快速入门 Spring Boot 微服务架构的搭建,并为实际项目提供参考。如果你有任何问题或建议,欢迎在评论区留言! 阅读详情

相关推荐

Mac 不小心断开移动硬盘导致磁盘无法读取和加载(顺利解决!)

Mac移动硬盘不正确断开连接导致无法读取加载的解决方法,亲测有效

Robin_Pi的博客 1万+

poj 3072(最短路)

题目链接:http://poj.org/problem?id=3072 一涉及稍微计算几何方面的东西就要做好久,一开始先用SPFA写的,可能是由于松弛次数过多导致精度损失,郁闷了好久,然后改成Dijkstra就没什么问题了。 http://paste.ubuntu.com/5920764/...

weixin_34151004的博客 122

Unity游戏开发实战:用柏林噪声打造3D随机地形(附完整C#代码)

本文详细介绍了如何在Unity游戏开发中使用柏林噪声算法生成3D随机地形,包含完整的C#代码实现。从基础柏林噪声原理到高级参数控制,再到性能优化和常见问题解决,帮助开发者掌握程序化地形生成技术,打造丰富多变的游戏世界。

weixin_29281941的博客 98

Poj 3072 Robot(单源最短路径)

这个题目很简单,但是细节处理麻烦,以至于做得想吐。题目大意:题目给出n个点的坐标,机器人一次性可以移动的最长距离R,当机器人要走向(xj,yj)时,必须转向(xj,yj).没转1度需要1秒,初始化机器人指向(xn,yn)。求机器人从(x1,y1)到(xn,yn)所需要的时间。大体思路:从(x1,y1)出发,在(x1,y1)的方向是指向(xn,yn)的,初始化所有的点到(x1,y1)的时间(转角需要的时间和距离所花费的时间)(x1->xi)。加入时间最小的节点(xm,ym)。更新其他未加入的节点的时间,如果(

小菜的一天 1251

STM32--LoRa通信模块

模块根据MD0的配置与AUX引脚的状态会进入不同的功能其中在通信功能下,包含4种工作模式。

qq_47258284的博客 1万+

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤

指导初学者使用Anaconda运行GitHub上One - DM项目的步骤。

AI的内部世界的博客 1484

POJ3072—Robot Dijkstra实现

简单的Dijkstra题目,稍微转个弯就可以了,因为要计算由一个点转到另一个点时所需的时间,所以可以设置一个结构体,用个成员变量记载该点到起点的距离,距离是起点到该点的直线距离加上上一个点转向该点的角度(一个角度需时一秒),然后再用Dijkstra求解就很简单了。 #include #include #include #include using namespace std;

飞翔的小鸟 620

開機自動進入UEFI Interactive Shell無法正常開機怎麼辦?

BIOS/UEFI,啟動後進入UEFI Interactive Shell大多數人都告訴你沒有安裝系統去裝系統吧,但你明明昨天還在運行系統?今天就這樣?有沒有解決辦法?

sheaahhoi1的博客 7738

[APIO2013]机器人(DP+SPFA最短路)

shortest path

254

WindowsServer2022蓝牙音频开启方法

为Windowsserver 2022 添加蓝牙音频驱动的方法和工具

thebestismin的专栏 2704

TenserRt平台SMOKE 3D目标检测部署完整教程:从理论到实践

本教程详细介绍了在RK3588平台上部署SMOKE 3D目标检测模型的完整流程。SMOKE是一种创新的单阶段单目3D检测方法,通过关键点估计直接预测3D目标信息,有效解决了深度信息缺失等挑战。文章从理论基础出发,解析了SMOKE的核心算法和网络架构,包括DLA-34主干网络和关键点中心化策略。同时提供了详细的Docker环境配置、模型导出到ONNX格式的实践指南,以及TensorRT引擎构建和性能优化的关键技术要点。该教程为开发者在嵌入式平台上实现高效3D目标检测提供了完整的技术参考。

LXY_LOVE36的博客 371

POJ 3072 Robot 笔记

已知 n 个点的坐标,要求机器人从(x1,y1)移动到(xn,yn),初始时机器人面对终点。机器人只能在距离不超过 R 的两点间移动,每秒移动一个单位,移动前需面对移动方向,每秒移动一度。求所需最短时间。

woniupengpeng的专栏 251

深入剖析 YOLOv11 中的 C2PSA 注意力机制

YOLOv11中的C2PSA注意力机制在目标检测领域取得突破性进展。该机制通过跨通道分组交互和轻量级位置编码,在仅增加0.6%计算量的情况下提升mAP 1.5-2.3个百分点。C2PSA创新性地结合局部跨通道交互、位置编码和双分支并行调制,采用纯卷积实现自注意力,避免传统注意力机制的高计算复杂度。实验表明,C2PSA在COCO数据集上以微小计算代价显著提升检测性能,特别是对小目标和遮挡目标效果突出。该模块可直接嵌入YOLO架构,为轻量级目标检测提供新的优化方向。

shrgegrb的博客 3396

poj 3072 Robot 最短路spfa

题意: 给nge

sepNINE的专栏 512

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ 刷题顺序

POJ从简到难(按照AC数目排序)的列表

马必辰的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

POJ 1724 ROADS单源最短路

题目链接:http://poj.org/problem?id=1724 求单源最短路,构建一个先贪心路径,在贪心钱的优先队列,每次取出距离源点最近,并且剩钱最多的点开始搜索,最先找到终点的路径一定是最短路径。 参考代码: #include #include #include #include #include using namespace std; #define MAX 105 #

fire__ice的专栏 3234

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

POJ 2457 Part Acquisition(最短路)

题目连接:http://poj.org/problem?id=2457 裸露的最短路,Dijkstra + 优先队列水过。。。 题意:就是求1到k之间的最短路,每条边的权值为1,若存在最短路,输出任意一条,若不存在,输出-1。 代码如下: #include #include #include #include using namespace std; #define INS 1<<29

fire__ice的专栏 869

最短路(Dijkstra+优先队列)

const int INF = 0xfffffff; const int M = 1005; Graph g; int Dis[M]; struct Node{ Node(){} Node(int Len, int Ind):len(Len),ind(Ind){} int len,ind; bool operator<(const Node& node) const{ return

fire__ice的专栏 760

POJ 2472 106 miles to Chicago(最短路)

题目连接:http://poj.org/problem?id=2472 题意:男孩要从1到n城市,每条道路有他不被抓的百分比,输出他到n不被抓的最大概率。 题目的数据有些问题,边开到20W才过,求最长路径即可。 参考代码: #include #include #include #include using namespace std; #define INS 0.0 #define

fire__ice的专栏 736

POJ 2394 Checking an Alibi(最短路)

题目连接:http://poj.org/problem?id=2394 题意:有F块土地,有的土地上有牛(可能有多头),粮仓在编号为1的土地上,问在M时间内有多少头牛可以到达粮仓,并按升序输出牛的编号。 用SPFA超时了。。。用优先队列优化的Dijkstra, 2394 Accepted 228K 0MS C++ 代码如下: #include #i

fire__ice的专栏 678

hdu3268

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3268 这是一个最短路的问题,建立一个源点S,然后连接所有的点,边上的权值为最初的价钱p-1,可用来交易的物品建边,权值为R,然后价钱相等的物品建边,权值为0,求以S为源点的单源多点最短路,即可求出结果,第二问三重循环可求解,注意第二问循环的判断条件,勿让物品选重复。。。,这里wa了好久。。代码参考:

fire__ice的专栏 651

hdu 2433 Travel (bfs+最短路生成树+剪枝)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2433 题意:一个由n个点、m条边构成的图,问分别去掉每个边后,剩下的图任意两点间最短路的和,如果不边通输出“INF"。 分析:先从每一个点求出它的单源最短路生成树(road数组),同时可以求出从此点到所有点最短路的和(sum数组),然后枚举每一条边,如果点s的最短路生成树中含有这条

fire__ice的专栏 624

POJ 2267 最短路

题目连接:http://poj.org/problem?id=2267 悲剧的题目,WA了n天,数据处理很变态,要拿着边作为新的点再建边,建过边之后就是简单的最短路了,在初始化的时候不小心把边初始化为0了(应该是起点的),几乎想放弃了,又AC了。。代码如下:#include #include #include #include #include #include #include using n

fire__ice的专栏 572

POJ 1847 Tram 最短路

题目链接:http://poj.org/problem?id=1847 就是一个单源最短路,需要注意的是,第i-1行表示为编号为i-1的结点,默认指向与它相连的第一个结点,不需要搬转,其他就没什么了。参考代码: #include #include #include #include using namespace std; #define MAX 205 #define CLR(arr,v)

fire__ice的专栏 564

POJ 1135Domino Effect

题目链接:http://poj.org/problem?id=1135             就是一个单源最短路问题,从编号为1的骨牌开始,按最短路依次倒下,求最后一个骨牌倒下需要多长时间,当求完最短路后,所有点中的最长时间也不一定是所求结果,我们把所求的最短路放在dis[MAX]数组中,如果编号为 i 的 结点不是出度为零的结点,那么它还要继续倒,我们可以枚举每条边,如果两个相邻结点倒的过程

fire__ice的专栏 423

POJ 2387Til the Cows Come Home(最短路)

题目连接:http://poj.org/problem?id=2387 裸题最短路,不解释。。。dijkstra代码如下: #include #include #include #include #include using namespace std; #define MAX 1005 #define CLR(arr,v) memset(arr,v,sizeof(arr)) int h[

fire__ice的专栏 375
上一篇: 输入外挂
下一篇: NYOJ 326 && POJ 3281 Dining (网络流)
fire__ice
博客等级 码龄15年 26粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值