Data Structures and Algorithms (English) - 7-11 Saving James Bond - Hard Version(30 分)

简介: Data Structures and Algorithms (English) - 7-11 Saving James Bond - Hard Version(30 分)

题目链接点击打开链接

题目大意:在一个 100*100 坐标 以及 中心原点(起点)在(0,0)位置并且半径为 7.5 的圆形上,附近有很多的鳄鱼(可以跳到上面去),问是否可以跳到坐标外(包含边界),若可以,筛选出距离最短的路径(边长度为1),如果最短路径一样,筛选出第一跳实际跳的距离最短的那条路径,题目保证唯一。

解题思路:第一跳需要特殊处理,是否可以跳出成功,若可以则输出;否则开始建网,无脑上 Dijsktra,只是比经典的 Dijsktra 多了个第一跳的距离 fst[i] 的一个传递性。

AC 代码

#include<bits/stdc++.h>#include<cmath>#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007usingnamespacestd;
typedeflonglongll;
constintmaxn=320; // 100 + 100*2(边界点:x,y分别一个)+ 1(原点)structnode{
intx,y;
}nds[maxn];
intn,len;
doubleD;
intvis[maxn], dis[maxn], pre[maxn], fst[maxn];
intg[maxn][maxn];
voidinit()
{
mem(g,INF), mem(vis,0), mem(dis,INF), mem(pre,-1), mem(fst,INF);
}
doublefdis(nodea, nodeb)
{
returnsqrt(pow(a.x-b.x,2) +pow(a.y-b.y,2));
}
voiddijkstra(ints)
{
dis[s]=0;
while(1)
    {
intmi=INF; s=-1;
for(inti=0;i<len;i++)
if(!vis[i] &&mi>dis[i]) mi=dis[i], s=i;
if(s==-1) return;
vis[s]=1;
for(inti=0;i<len;i++)
if(!vis[i] &&mi+g[s][i]<dis[i])
            {
dis[i]=mi+g[s][i], pre[i]=s;
if(s!=0) fst[i]=fst[s]; // 传递第一跳的距离            }
elseif(!vis[i] &&mi+g[s][i]==dis[i] &&fst[i]>fst[s]) // 路径距离相同时,较第一跳距离比较短的优先pre[i]=s, fst[i]=fst[s];
    }
}
intmain()
{
scanf("%d%lf",&n,&D);
n++; // 原点也算为一个点nds[0].y=nds[0].x=0;
for(inti=1;i<n;i++) scanf("%d%d",&nds[i].x,&nds[i].y);
if(D+7.5>=50) // 特判    {
puts("1");
return0;
    }
len=n;
for(inti=1;i<n;i++) // 加入符合D的边界(河岸)的点if(50-abs(nds[i].x)<=D)
nds[len].x=nds[i].x>=0?50:-50, nds[len++].y=nds[i].y;
elseif(50-abs(nds[i].y)<=D)
nds[len].y=nds[i].y>=0?50:-50, nds[len++].x=nds[i].x;
init();
doublediff;
for(inti=1;i<len;i++)
    {
if((diff=fdis(nds[0],nds[i])-7.5)<=D) // 筛选原点到第一跳的距离g[i][0]=g[0][i]=1, fst[i]=diff; // 算出第一跳的距离// 除了原点,第二跳开始各自符合D的建边// why 原点到边界的不用算? 因为上面有了特判for(intj=1;j<len;j++)
if(i!=j&&fdis(nds[i],nds[j])<=D)
g[i][j]=g[j][i]=1;
    }
dijkstra(0);
intmi=INF, h=-1;
for(inti=n;i<len;i++) // 筛选第一优先级最小dis,第二优先级最小fstif(mi>dis[i] ||mi==dis[i] &&h!=-1&&fst[h]>fst[i])
mi=dis[i], h=i;
if(mi!=INF)
    {
printf("%d\n",mi);
vector<int>vec;
while(h!=-1)
        {
vec.push_back(h);
h=pre[h];
        }
for(inti=vec.size()-2;i>0;i--) // 原点和边界点无需输出printf("%d %d\n",nds[vec[i]].x,nds[vec[i]].y);
    }
elseputs("0");
return0;
}
目录
相关文章
|
机器学习/深度学习 编解码 人工智能
Reading Notes: Human-Computer Interaction System: A Survey of Talking-Head Generation
由于人工智能的快速发展,虚拟人被广泛应用于各种行业,包括个人辅助、智能客户服务和在线教育。拟人化的数字人可以快速与人接触,并在人机交互中增强用户体验。因此,我们设计了人机交互系统框架,包括语音识别、文本到语音、对话系统和虚拟人生成。接下来,我们通过虚拟人深度生成框架对Talking-Head Generation视频生成模型进行了分类。同时,我们系统地回顾了过去五年来在有声头部视频生成方面的技术进步和趋势,强调了关键工作并总结了数据集。 对于有关于Talking-Head Generation的方法,这是一篇比较好的综述,我想着整理一下里面比较重要的部分,大概了解近几年对虚拟人工作的一些发展和
|
移动开发 C语言
PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分)
PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分)
89 0
|
存储 容器
Data Structures and Algorithms (English) - 7-18 Hashing - Hard Version(30 分)
Data Structures and Algorithms (English) - 7-18 Hashing - Hard Version(30 分)
213 0
Data Structures and Algorithms (English) - 7-18 Hashing - Hard Version(30 分)
|
机器学习/深度学习 算法
Data Structures and Algorithms (English) - 7-28 Review of Programming Contest Rules(30 分)
Data Structures and Algorithms (English) - 7-28 Review of Programming Contest Rules(30 分)
199 0
Data Structures and Algorithms (English) - 7-28 Review of Programming Contest Rules(30 分)
Data Structures and Algorithms (English) - 7-10 Saving James Bond - Easy Version(25 分)
Data Structures and Algorithms (English) - 7-10 Saving James Bond - Easy Version(25 分)
86 0
Data Structures and Algorithms (English) - 7-8 File Transfer(25 分)
Data Structures and Algorithms (English) - 7-8 File Transfer(25 分)
103 0
Data Structures and Algorithms (English) - 6-15 Iterative Mergesort(25 分)
Data Structures and Algorithms (English) - 6-15 Iterative Mergesort(25 分)
183 0
Data Structures and Algorithms (English) - 6-8 Percolate Up and Down(20 分)
Data Structures and Algorithms (English) - 6-8 Percolate Up and Down(20 分)
98 0
PAT (Advanced Level) Practice - 1004 Counting Leaves(30 分)
PAT (Advanced Level) Practice - 1004 Counting Leaves(30 分)
101 0
PAT (Advanced Level) Practice - 1118 Birds in Forest(25 分)
PAT (Advanced Level) Practice - 1118 Birds in Forest(25 分)
100 0