首页 > 试题广场 >

恶魔果实

[编程题]恶魔果实
  • 热度指数:1036 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛得到了一堆神奇的恶魔果实,每个恶魔果实都给了牛牛一个改变数字的能力,可以把数字a变成数字b,现在牛牛有一个数字x,他想知道吃完这n个恶魔果实后,他可以把数字x变成多少种的数。
注:每一个恶魔果实的能力可以重复使用多次,当然也可以不用,存在相同能力的恶魔果实.

输入描述:

第一行输入一个正整数x(1≤x≤109),和一个正整数n(1≤n≤106),接下来n行,每行一个a(0≤a≤9 )和一个b(1≤b≤9)。



输出描述:
表示可以变的数字种类数,答案对104+7取模
示例1

输入

456 3
5 6
4 5
4 5

输出

6

说明

456 556 656 466 566 666
示例2

输入

111 1
1 2

输出

8

说明

111 112 121 122 211 212 221 222

备注:

头像 kilomatutinal
发表于 2026-03-02 01:21:44
这道题简单喵!我们只需要知道:对于每个数字 0~9,它最终能变成哪些数字(包括它自己),然后把 x 的每一位的可能性乘起来,就得到总数喵!用 to[a][b] 表示是否有直接能力把 a 变成 b 喵~输入 n 条规则,就把对应的 to[a][b] 设为 true。传递闭包(Floyd-Warshal 展开全文
头像 Kur1su
发表于 2020-06-21 20:04:23
Description 牛牛得到了一堆神奇的恶魔果实,每个恶魔果实都给了牛牛一个改变数字的能力,可以把数字a变成数字b,现在牛牛有一个数字x,他想知道吃完这n个恶魔果实后,他可以把数字x变成多少种的数。注:每一个恶魔果实的能力可以重复使用多次,当然也可以不用,存在相同能力的恶魔果实. Solutio 展开全文
头像 此在Dasein
发表于 2026-03-02 07:38:16
问题分析 核心是对数字的每一位进行独立的状态转移计算: 位独立性与组合爆炸:恶魔果实的能力作用于数字 的每一个独立位,而非整体数值。例如 ,规则 会产生 种结果。这本质上是一个组合数学中的乘法原理问题,总种类数为每一位可演变出的数字种类数的连乘积。 规则的传递性与无限复用:如果存在规则 和 展开全文
头像 YunBaichuan
发表于 2026-03-02 09:49:44
思路:Floyd算法。把输入的a, b边建邻接矩阵,然后跑一遍Floyd算法,之后再算出每个数位有几种变化情况。最终,遍历输入x的每一个数位,把每个数位可能的变化情况进行累乘并取mod即可。为什么?因为每一个数位独立,那就可以用乘法原理把各自的可能性给乘起来,就可以得到最终答案了 代码: impor 展开全文
头像 pandaC222
发表于 2026-03-02 20:15:55
每个数的情况是独立的,我们只需要算出每个数能变换成多少种数字即可,这点用bfs实现,我们只需要搜索0-9的数即可代码如下 #include<bits/stdc++.h> using namespace std; #define int long long #define debug(x) 展开全文
头像 东溪看水
发表于 2020-06-23 16:56:54
解题思路 有 n 个神奇的恶魔果实,每个恶魔果实有一个改变数字的能力,可以把数字 a 变成数字 b。给定一个正整数 x,吃完这些恶魔果实后,可以把数字 x 变成多少种的数。注:每一个恶魔果实的能力可以重复使用多次,当然也可以不用,存在相同能力的恶魔果实。 使用 vis 记录数字 a 可以变成的数字, 展开全文
头像 quchen666
发表于 2026-03-02 11:52:15
#include <bits/stdc++.h> using namespace std; const int N=1e6+10; const int mod = 1e4+7; typedef long long ll; typedef unsigned long long ull; l 展开全文
头像 热爱伊蕾娜
发表于 2026-03-02 11:58:58
#include<bits/stdc++.h> using namespace std; const int mod = 1e4+7; const int N = 1e6+100; int f[10][10]; int vis[10]; int main() { int x,n; 展开全文
头像 颜开Young
发表于 2026-03-02 15:18:04
// Created on 2026-03-02 14:49:22 #include<bits/stdc++.h> using ll = long long; using ull = unsigned long long; using namespace std; const int 展开全文
头像 250512305王秉全
发表于 2026-03-02 16:53:30
三月二日 恶魔果实分析:首先我们要明确一个事情,就是每一个恶魔果实可以进行的操作数      是任意次的,可以是0,也可以是无限      那么我们很容易就能判断出这是一个排列组合问题 就是每一位数字有多少种变化,最终把每一位数字的变化书相乘即可,由于每一个数只少都能是自己,因此每次相乘 展开全文