2020CCPC网络赛

先感叹下,太菜了太菜了 啊

题目链接

题目大意:

有n个保险柜,从1到n编号,1号为入口,每两个保险柜之间的距离是1,有一个编号为k的保险柜,它能打开其它的保险柜(注意:一次只能打开一个保险柜),需要从入口进入,去m个保险柜取东西,然后再从入口出去,让你求最短的路径。

解题思路:

一开始我理解错了,以为一次可以把所有的保险柜开了,就白白wa了一次,后来队友想出了一个思路把我绕进去了,至今还没明白,碰巧那时我妈突然电话连环call我,急着去回电话结果是给我吐槽买肉火烧被坑了(手动无奈)

这个题就是 你取一个之前都要跑一次k,那就是2*(abs(k-i)) 最后记得加上往返的 2*(k-1),还有如果K左边是有保险柜的,记得减去左边最小的那个,因为可以回去的时候顺便取了

代码如下:

#include<iostream>
using namespace std;
int main()
{
	long long n,x,k,y,t,m,i,ans,minx;
	k=0;
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld%lld%lld",&n,&m,&k);
		ans=0;
		y=0;
		minx=k;
		for(i=1;i<=m;i++)
		{
			scanf("%lld",&x);
			y=abs(k-x);
			ans+=(y*2);
			minx=min(x,minx);
		}
		if(minx<k)
		ans-=2*(k-minx);
		ans+=2*(k-1);
		printf("%lld\n",ans);
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/weixin_43819762/article/details/108716870