当前位置: 首页 > news >正文

P1037 [NOIP 2002 普及组] 产生数

P1037 [NOIP 2002 普及组] 产生数

题目描述

给出一个整数 nnnkkk 个变换规则。

规则:

  • 一位数可变换成另一个一位数。
  • 规则的右部不能为零。

例如:n=234,k=2n=234,k=2n=234,k=2。有以下两个规则:

  • 2⟶52\longrightarrow 525
  • 3⟶63\longrightarrow 636

上面的整数 234234234 经过变换后可能产生出的整数为(包括原数):

  • 234234234
  • 534534534
  • 264264264
  • 564564564

444 种不同的产生数。

现在给出一个整数 nnnkkk 个规则。求出经过任意次的变换(000 次或多次),能产生出多少个不同整数。

仅要求输出个数。

输入格式

第一行两个整数 n,kn,kn,k,含义如题面所示。

接下来 kkk 行,每行两个整数 xi,yix_i,y_ixi,yi,表示每条规则。

输出格式

共一行,输出能生成的数字个数。

输入输出样例 #1

输入 #1

234 2
2 5
3 6

输出 #1

4

说明/提示

对于 100%100\%100% 数据,满足 n<1030n \lt 10^{30}n<1030k≤15k \le 15k15

【题目来源】

NOIP 2002 普及组第三题

对于这题,我们需要考虑每一个数字经过有限次变换可以有多少可能。即其路径上经过了多少个不同的结点。使用floyd-warshall解决这个传递闭包问题。

#include <bits/stdc++.h>
using namespace std;vector<int> mul(const vector<int>& num, int m) {if (m == 0) {return {0};}vector<int> result;int carry = 0;for (int digit : num) {int product = digit * m + carry;result.push_back(product % 10);carry = product / 10;}while (carry > 0) {result.push_back(carry % 10);carry /= 10;}return result;
}int main() {ios_base::sync_with_stdio(false);cin.tie(NULL);string n_str;int k;cin >> n_str >> k;bool g[10][10] = {false};for (int i = 0; i < 10; ++i) {g[i][i] = true;}for (int i = 0; i < k; ++i) {int u, v;cin >> u >> v;g[u][v] = true;}for (int kk = 0; kk < 10; ++kk) {for (int i = 0; i < 10; ++i) {for (int j = 0; j < 10; ++j) {if (g[i][kk] && g[kk][j]) {g[i][j] = true;}}}}int choices[10] = {0};for (int i = 0; i < 10; ++i) {for (int j = 0; j < 10; ++j) {if (g[i][j]) {choices[i]++;}}}vector<int> num = {1};for (char c : n_str) {int digit = c - '0';num = mul(num, choices[digit]);}for (int i = num.size() - 1; i >= 0; --i) {cout << num[i];}cout << endl;return 0;
}
http://www.dtcms.com/a/320194.html

相关文章:

  • vue-plugin-hiprint 打印模版使用
  • 【IQA技术专题】大模型评级IQA:Q-Align
  • 深入理解“进程屏蔽字“(Signal Mask)
  • 利用OpenVINO™ Day0快速部署端侧可用的MiniCPM-V4.0视觉大模型
  • 【代码随想录day 14】 力扣 226.反转二叉树
  • C语言memcpy函数详解:高效内存复制的实用工具
  • uniapp-vue2导航栏全局自动下拉变色
  • 损耗对信号质量的影响
  • OpenAI 开源 GPT-OSS:大型语言模型的开放时代正式来临!
  • HTTP请求头详解:从基础到实战
  • 当函数返回有多个返回值时,需要注意的问题 : Effective Python 第19条
  • C++ vector 扩容时到底发生了什么?
  • 一个程序通过 HTTP 协议调用天气 API,解析 JSON 格式的天气数据,提取关键信息并格式化输出:日期、天气状况、温度范围、风向、湿度等核心气象数据。
  • 1688 商品详情接口开发实战:从平台特性到高可用实现
  • Redis最新安装教程(WindowsLinux)
  • 对基带信号进行调制的原因及通俗理解
  • HR人才测评工具,卡特尔16pf性格测试
  • Numpy科学计算与数据分析:Numpy数学函数入门与实践
  • 我爱发明之Linux下使用Conky在桌面显示Spotify状态及封面字符画
  • 无损音乐下载器!(电脑)绿色免费,无限下载,无损音质
  • 是否将标签页tag信息存储在Redux store中还是仅存储在hook的state中
  • AI题解5
  • 什么是0.5米分辨率卫星影像数据?
  • 一文学会c++继承 组合
  • [优选算法专题一双指针——两数之和](双指针和哈希表)
  • 解决GitHub push失败-Failed to connect to github.com port 443: Timed out
  • 亚马逊卖家反馈机制变革:纯星级评级时代的合规挑战与运营重构
  • SOMGAN:用自组织映射改善GAN的模式探索能力
  • 自然语言处理×第四卷:文本特征与数据——她开始准备:每一次输入,都是为了更像你地说话
  • python selenium环境安装