Codeforces Contest 1070 problem A Find a Number —— bfs求a的最小倍数且所有位的和是b

2024-04-07 00:32

本文主要是介绍Codeforces Contest 1070 problem A Find a Number —— bfs求a的最小倍数且所有位的和是b,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

You are given two positive integers d and s. Find minimal positive integer n which is divisible by d and has sum of digits equal to s.

Input
The first line contains two positive integers d and s (1≤d≤500,1≤s≤5000) separated by space.

Output
Print the required number or -1 if it doesn’t exist.

Examples
inputCopy
13 50
outputCopy
699998
inputCopy
61 2
outputCopy
1000000000000000000000000000001
inputCopy
15 50
outputCopy
-1

题意:

给你a和b,让你找出一个数使得这个数是a的倍数并且它所有位的和是b,且这个数最小。

题解:

我以前做过这道题目?好像是这样的,但是没什么印象了。而且我两次用的都是bfs!
因为它要你求得最小的数,那么我就觉得是bfs往下,这样求到的肯定是最小的,因为我是从小到大for的,dp不是dp,他只是一个类似vis的效果。我们记录两个状态:res:余数和sum:累加,如果之后有遇到过和之前一样的状态的话,那肯定是前面的优一点了,就算把dp全求出来,,也不过n*m的复杂度。输出由于我们是从高位往低位bfs的,那就dfs输出就好了。
如果从低位往高位bfs的话,余数的处理就会变得麻烦一点。。吧

#include<bits/stdc++.h>
using namespace std;
#define pa pair<int,int>
struct node
{int sum,num,res;node(){}node(int s,int n,int r):sum(s),num(n),res(r){}
}pre[505][5005];
void dfs(int x,int res)
{if(x==0&&res==0)return ;dfs(pre[res][x].sum,pre[res][x].res);printf("%d",pre[res][x].num);
}
int dp[505][5005];
int main()
{int n,m;scanf("%d%d",&n,&m);queue<node>Q;Q.push(node(0,0,0));dp[0][0]=1;int ans=-1;while(!Q.empty()){node v=Q.front();Q.pop();for(int i=0;i<=9;i++){if(i+v.sum>m)break;node ne;ne.res=(v.res*10+i)%n;ne.sum=v.sum+i;if(dp[ne.res][ne.sum])continue;pre[ne.res][ne.sum].res=v.res;pre[ne.res][ne.sum].sum=v.sum;pre[ne.res][ne.sum].num=i;dp[ne.res][ne.sum]=1;Q.push(node(ne.sum,i,ne.res));if(ne.sum==m&&ne.res==0){ans=m;break;}}if(ans!=-1)break;}if(ans==-1)return 0*printf("-1\n");dfs(ans,0);return 0;
}

这篇关于Codeforces Contest 1070 problem A Find a Number —— bfs求a的最小倍数且所有位的和是b的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881229

相关文章

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出