ARC084 B Small Multiple 题解

news/2024/9/26 0:10:19

原题链接

Description

给定一整数 \(k\) , 求一个 \(k\) 整数倍的数 \(x\) ,使得 \(x\) 的数位累加和最小,输出最小的累加和。

Solution

这道题简单但值得一想。

正着枚举每一个 \(k\) 整数倍的数 \(x\) 肯定会超时,反过来考虑,可以找一个数 \(x\) 使其为 \(k\) 的倍数,那么对于每个数 \(x\) ,均有以下两种操作:

  • 将这个数 \(\times 10\) ,对应花费为 \(0\)

  • 将这个数 \(+ 1\) ,对应花费为 \(1\)

至于说为什么可以转化为这两种操作,主要是一种贪心的思想,我们并不需要考虑 \(x\) 的大小,只需要尽量使其花费最小。

实现就很简单了,这里可以使用 \(01BFS\) ,将使用花费为 \(0\) 操作所得的数插入队首,将花费为 \(1\) 的插入队尾,注意跳掉已经找过余数相同数的数。

Code

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
#define MAXN 100100
//#define int long long
int Read()
{int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-f;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}return x*f;
}
int k,vis[MAXN];
deque<pair<int,int> > q;
int main()
{k=Read();q.push_front(make_pair(1,1));while(!q.empty()){pair<int,int> qwq=q.front();q.pop_front();if(vis[qwq.first]) continue;vis[qwq.first]=1;if(!qwq.first) return printf("%d",qwq.second),0;q.push_front(make_pair(qwq.first*10%k,qwq.second));q.push_back(make_pair((qwq.first+1)%k,qwq.second+1));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/64808.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Java中到底有哪些锁

乐观锁和悲观锁 不是具体的锁,是指看待并发同步的角度 悲观锁:对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。 乐观…

Pyqt5 修改表格排序箭头

实现效果:代码from chatgptimport sys from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget from PyQt5.QtCore import Qtclass TableDemo(QWidget):def __init__(self):super().__init__()# 创建表格self.table_widget = QTabl…

day7[XTuner 微调个人小助手认知任务]

微调前用 internlm2-chat-1_8b 模型,通过 QLoRA 的方式来微调一个自己的小助手认知作为案例来进行演示

【算法】笔试题记录

哇今天做了道特别有意思的题。 编程就给了两道,第一题特别简单,a、b两个数,每次选其中一个数*2,这样操作两次,问最后得到的两数之和的期望值是多少。 简单吧?因为每次选择都有两种可能性,操作两次后就会有四种可能的结果(22)。其中有两个结果是重复的(2a, 2b),剩下两个…

使用AI进行需求分析的案例研究

生成式 AI 的潜在应用场景似乎无穷无尽。虽然这令人兴奋,但也可能让人不知所措。因此,团队在使用这项技术时需要有明确的目标:关键是要明确生成式 AI 在团队工作中能产生哪些实质性影响。 在软件工程中,一个引人注目的应用场景是需求分析。这是一个常常被忽视但充满挑战的环…

02 第三组(4个)进制转换

进制转换:二进制,十六进制、八进制、十进制 bin 二进制 oct 8进制 hex 十六进制 int 10进制二进制 和十进制#10进制转二进制 v1 = bin(48) print(v1)#二进制转10进制 v1 = 0b1010101 v2 = int(v1, base=2)八进制 和十进制#10进制转八进制 v1 = oct(48) print(v1)#八进制转1…

实验1_C语言输入输出和简单程序应用编程

任务一 1-1#include<stdio.h> int main() { printf(" O "); printf("<H>"); printf("I I"); printf(" O "); printf("<H>"); printf("I I"); return 0; }1-2#include<stdio.h> int main(…

初识vue

1.概述我眼中的vue,vue是前端开发的一个框架,可以大大提高开发的效率,最新的是vue3,企业目前使用vue2,其主要核心是V-VM-M的思想,作用是让数据和图像进行双向绑定,就是视图改变数据改变,数据改变视图改变. 2.在使用Vue时要应用文件vue.js在头部,在其他位置引用起不到作用3.在定…