传送门
题意:
题目很短就是给你一个N,然后要找一个N的倍数,需要他们的每一位数之和最小。
请输出最小值,如 6 , 12=2*6. 此时可以得到3.
题解:
这个题,本来我也是划水的,真的没看到什么规律可言,但是细心的Passer_by看出来。
其实这个题目就是问一个怎么通过从1开始走达到N的倍数的问题。
可以有两个操作:
- 操作一:可以加1 %n
- 操作二:可以乘以10 %n
这不就是我们以前BFS的思想吗?
以前不是有BFS那一类通过 向左走x步,向右做y步,最后操作多少次能得到答案。
这个不就是以前的思想吗?一模一样。但是题解除了给了BFS这种想法外还给了,建图的做法。
这个想法不太一样,就是通过某一个点加1之间的权值就是1,某一点*10.权值是10;
从1开始跑一个最短路得到答案。
代码主要参考网上的:
/*if you ask me how much i love you
the moonlight stand for my heart*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
pair<int,int>p;
deque< pair<int,int> >