首页 > 其他分享 >洛谷题解-[ARC001B] リモコン

洛谷题解-[ARC001B] リモコン

时间:2024-01-28 20:57:47浏览次数:33  
标签:10 洛谷 ARC001B int 题解 样例 back push dis

https://www.luogu.com.cn/problem/AT_arc001_2

题目描述

 

输入格式

输出格式

题意翻译

题目描述: 高桥君要调整空调的设定温度。现在的设定温度是A度,而他想调到B度。 空调遥控器按一次可以:

  • 上调或下调1度
  • 上调或下调5度
  • 上调或下调10度 高桥君想求出从A调到B度的最小操作数。

输入格式: 输出以下列形式给出。

A B

0<=A,B<=40

输出格式: 输出最小操作数。

样例与说明:

样例1: 输入:

7 34

输出:

5

依次上调10、10、5、1、1度即可

样例2: 输入:

19 28

输出:

2

上调10度、下调1度即可。

样例3: 输入:

10 10

输出:

0

温度一样时无需调整。

感谢 @玉签初报明 提供的翻译。

输入输出样例

 

最短路不一定是图才有,关于“最小”都可以联想一下

 

乍一看跟最短路没关系,但是还是隐藏关系的

我们可以把温度看成点,每个边的权为1,求的就是最少次数,也就是最短路

如何建图?可以0~40度都遍历一遍

  • 上调或下调1度
  • 上调或下调5度
  • 上调或下调10度

这样都可以建,把按一次遥控器能切换的温度中间连边,边权为1,表示按了一次

然后A是起点,走到B终点

本题数据量小,A与B的范围都是40,可以使用Floyd和Johnson,也可以Dijkstra和SPFA等等。

我就用Dijkstra+堆优化。

注意边界范围!

很妙

#include <bits/stdc++.h>
using namespace std;

const int N=45;
struct node
{
	int v, w;
	bool operator <(const node &A) const
	{
		return w>A.w;
	};
};
int x, y, dis[N], vis[N];
vector<node> a[N];
priority_queue<node> q;
void dij(int s)
{
	memset(dis, 63, sizeof dis);
	memset(vis, 0, sizeof vis);
	dis[s]=0, q.push({s, 0});
	
	while (!q.empty())
	{
		int u=q.top().v;
		q.pop();
		
		if (vis[u]) continue;
		vis[u]=1;
		
		for (int i=0; i<a[u].size(); i++)
		{
			int v=a[u][i].v, w=a[u][i].w;
			if (!vis[v] && dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
				q.push({v, dis[v]});
			}
		}
	}
}
int main()
{
	scanf("%d%d", &x, &y);
	for (int i=0; i<=40; i++)
	{
		if (i-1>=0)
			a[i].push_back({i-1, 1}), a[i-1].push_back({i, 1});
		if (i-5>=0)
			a[i].push_back({i-5, 1}), a[i-5].push_back({i, 1});
		if (i-10>=0)
			a[i].push_back({i-10, 1}), a[i-10].push_back({i, 1});
		if (i+1<=40)
			a[i].push_back({i+1, 1}), a[i+1].push_back({i, 1});
		if (i+5<=40)
			a[i].push_back({i+5, 1}), a[i+5].push_back({i, 1});
		if (i+10<=40)
			a[i].push_back({i+10, 1}), a[i+10].push_back({i, 1});
	}
	
	dij(x);
	printf("%d\n", dis[y]);
	return 0;
}

 

标签:10,洛谷,ARC001B,int,题解,样例,back,push,dis
From: https://www.cnblogs.com/didiao233/p/17993313

相关文章

  • P1197 [JSOI2008] 星球大战 题解
    P1197[JSOI2008]星球大战题解题目链接P1197[JSOI2008]星球大战简要思路看完题目的第一印象是——连通性。图论中判断连通性很容易想到并查集,但是并查集只支持合并和查询,并不支持删除,怎么办呢?考虑逆向思维,把删点的过程倒过来,看成加点和连边,那么此题就可以非常方便的用并......
  • 洛谷题解-P1938 [USACO09NOV] Job Hunt S
    https://www.luogu.com.cn/problem/P1938题目描述Bessieisrunningoutofmoneyandissearchingforjobs.FarmerJohnknowsthisandwantsthecowstotravelaroundsohehasimposedarulethathiscowscanonlymakeD(1<=D<=1,000)dollarsinac......
  • ATtokiomarine2020E O(rand) 题解
    题目链接点击打开链接题目解法首先,\(S\)一定要是\(T\)的子集先筛出符合条件的\(a_i\),即满足\(S\subseteqa_i\subseteqT\)令\(dif\)为\(T-S\),定义数\(x\)覆盖第\(y\)位为二进制下\(x\)的第\(y\)位为\(1\)现在的问题变成了找到大小\(\lek\)的\(\{a_i\}......
  • 洛谷题解-P2888 [USACO07NOV] Cow Hurdles S (Floyd)
    https://www.luogu.com.cn/problem/P2888题目描述FarmerJohnwantsthecowstoprepareforthecountyjumpingcompetition,soBessieandthegangarepracticingjumpingoverhurdles.Theyaregettingtired,though,sotheywanttobeabletouseaslittleene......
  • ABC338 F Negative Traveling Salesman 题解
    QuestionABC338FNegativeTravelingSalesman给出一个\(N\)个点\(M\)条边的有向图,边权可能为负数,但不可能有负环每经过一条边就要加上这条边的代价求,一条路径经过所有的点,并且要求总代价最小Solution观察到\(N\le20\)自然而然想到状压因为多次经过一条边的代价是......
  • [洛谷]美化
    洛谷美化指南\(\color{pink}\mathbf{大家好,相比很多洛谷党都觉得洛谷的界面特别单一(丑陋)。}\)\(\color{red}\mathbf{那我们就可以借助一下这个东西:Tampermonkey。(注:在扩展商店里搜索英文名)}\)1.安装“篡改猴Tampermonkey”网址:Tampermonkey2.安装脚本:氢洛谷下载脚本:氢洛谷......
  • CF1423G Growing flowers题解
    考虑每种颜色的贡献,用总数\(n-k+1\)减去没有贡献到的(极长连续段长度为\(len\)时),贡献为\(\max(len-k+1,0)\),所以考虑用\(\text{ODT}\)维护所有颜色的连续段。具体的,维护一个大的\(ODT\)存储所有连续段,再对每个颜色存储自己的连续段,用\(\text{BIT}\)维护每个长度的极长......
  • ABC338 D Island Tour 题解
    Question有\(n\)座海岛由\(n\)条桥连着,第\(i\)座桥连接第\(i\)和\(i+1\)座海岛,第\(n\)座桥连接第\(n\)和\(1\)座海盗有一条长度为\(m\)的旅游路线,第\(X_i\)表示依次到达的岛屿现在需要切断一条桥,求总旅游路线最小值Solution显然,从第\(X_{i-1}\)到\(X_......
  • ABC338 E Chords 题解
    Question一个圆上有\(2N\)个点均匀分布,给出\(N\)条线,每条线连接两个顶点问,有没有两条线相交Solution也算一个比较典的题目考虑到这种两两配对,配对中有没有交错关系的可以考虑异或哈希因为一个数异或两次等于它本身,所以我们可以用异或来实现一个“撤销”操作我们当我......
  • UVA10852 的题解
    UVA10852的题解题目大意给定自然数\(n(100\leqn\leq10000)\),寻找质数\(x\len\),使得\(p\timesx\leqn<(p+1)\timesx\)且\(n-p\timesx\)最大。思路不难发现,\(p\)其实就是$\left\lfloor\frac{n}{x}\right\rfloor$,所以,我们只要找到对应的\(x\),\(p\)的只就......