| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 洛谷题解 P1037 [NOIP2002 普及组] 产生数(佛洛依德+高精度) -> 正文阅读 |
|
[数据结构与算法]洛谷题解 P1037 [NOIP2002 普及组] 产生数(佛洛依德+高精度) |
真的好久没有写洛谷的题解,原因就是不会真的好难这个搜索,好多的代码连看都看不明白。干干巴巴的看明白了一个题就连忙发一个题解吧! 链接: 题目: 题目就是给你一个数,然后给你一个n对数,代表每一个0到9 的数可以替换成另一个0到9的数,最后求一共能够形成多少种不同数 这个题吧,应该是用搜索来做,救出每一个数可以有几种变形,在根据原来的数求出最后的结果,但是在看题解的时候发现,有一个 Floyd 的算法,索性就看了看感觉还挺简单,刚好我们数据结构刚好学到图论,有刚好有这个Floyd的算法,这种种的巧合,最后选择了这个解法(我的叙述总是感觉怪怪) 思路: 就是用Floyd的算法求出每一个的数他可以变形的个数,在使用高精度求出最后的个数来。(思路简简单单,但是实现课不容易啊) 代码奉上: 首先,我们先看 Floyd 算法来对0~9的每一数进行遍历,看他们每一个数都可以变形的个数。
(小插曲)写到这里之后我在想会不会会有重复啊,也就是说通过变形之后的值会不会能相同,如果能相同的话这种方法就会有问题了, 最后用d[] 数组来求出每一个数的能够变换的个数来。 解决了这一个之后,最剩下最后一个问题了如何求出数来,按照之前的做法就是对每个数进行遍历然后再乘起来
但是看题目给的条件,最后得出的数会非常的大,所以我们用long long的类型是根本装不下的,那么我们就想另一种方法啊高精度
刚看到这个代码就感觉啥玩意又/又%的但是一步一步来就很容易理解了,num就是代表每一位的位数,位数到了10进一,len是求这一共几位数。 最后就是完整的代码了
值得注意的是这个是按照高位数输出的,很容易理解嘛。12345,1是最高位。 其实这段时间还是比较懒吧,题没怎么做,一个劲的瞎搞一些别的东西(也不算是瞎搞毕竟自己喜欢嘛),写的东西也比较少,其实上一周真的是啥也没干成,做了三次题直接把我心态搞炸了,其实也有点自暴自弃吧,学了这么久成效甚微。最后题解博客就当总结博客充数了,上一周也还有很多想整理的东西(比如说还有两次的题解,图论的其他算法感觉也挺有用的 ),最后也没有整理。也快到考试复习月了,这段时间在突破突破吧。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:38:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |