`
Simone_chou
  • 浏览: 192765 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Yet Another Multiple Problem(BFS)

    博客分类:
  • HDOJ
 
阅读更多

Yet Another Multiple Problem

Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 3041    Accepted Submission(s): 735


Problem Description
There are tons of problems about integer multiples. Despite the fact that the topic is not original, the content is highly challenging. That’s why we call it “Yet Another Multiple Problem”.
In this problem, you’re asked to solve the following question: Given a positive integer n and m decimal digits, what is the minimal positive multiple of n whose decimal notation does not contain any of the given digits?
 

 

Input
There are several test cases.
For each test case, there are two lines. The first line contains two integers n and m (1 ≤ n ≤ 104). The second line contains m decimal digits separated by spaces.
Input is terminated by EOF.
 

 

Output
For each test case, output one line “Case X: Y” where X is the test case number (starting from 1) while Y is the minimal multiple satisfying the above-mentioned conditions or “-1” (without quotation marks) in case there does not exist such a multiple.
 

 

Sample Input
2345 3
7 8 9
100
1 0
 

 

Sample Output
Case 1: 2345
Case 2: -1
 

 

Source

 

 

        题意:

        给出 N(1 ~ 10000) 和 M,后给出 M 个数字,输出 N 的最小倍数,这个数不包含给出的 M 个数字。

 

       思路:

       BFS。枚举 N 的倍数的话无疑会 T,所以从 0 ~ 9 构造数,判断这个数能否出现且维护这个数 % N 的余数,以第一个出现的余数为基准,因为以后出现相同余数的一定会比之前的大,所以第一次出现的余数就放进队列中,知道找到 % N == 0 的为止。下次更新新的数的时候,mod = (mod X 10 + i )% n。注意插入第一个数的时候也要判断 % N 后是不是等于 0。

 

        AC:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <string>
#include <iostream>

using namespace std;

typedef struct {
        int mod;
        string num;
} node;

bool vis[15], p[10005];
int num;

bool bfs () {
        queue<node> q;

        for (int i = 1; i <= 9; ++i) {
                if (!vis[i]) {
                        node a;
                        a.mod = i % num;
                        a.num = i + '0';
                        if (!a.mod) {
                                cout << a.num << endl;
                                return true;
                        }
                        q.push(a);
                }
        }

        while (!q.empty()) {
                node now = q.front(); q.pop();

                for (int i = 0; i <= 9; ++i) {
                        node New;

                        if (!vis[i]) {
                                string a;
                                a = i + '0';

                                New.num = now.num + a;
                                New.mod = (now.mod * 10 + i) % num;
                                if (!New.mod) {
                                        cout << New.num << endl;
                                        return true;
                                } else if (!p[New.mod]) {
                                        q.push(New);
                                        p[New.mod] = 1;
                                }
                        }
                }
        }

        return false;
}

int main() {
        int m, t = 0;

        while (~scanf("%d%d", &num, &m)) {
                memset(vis, 0, sizeof(vis));
                memset(p, 0, sizeof(p));

                while (m--) {
                        int ans;
                        scanf("%d", &ans);
                        vis[ans] = 1;
                }

                printf("Case %d: ", ++t);
                if(!bfs()) printf("-1\n");
        }

        return 0;
}

 

 

 

分享到:
评论

相关推荐

    POJ1426-Find The Multiple【BFS+同余模】

    【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...

    魔方-BFS-输入_魔方bfs_魔方降群法+双向bfs_魔方降群_

    在IT领域,尤其是在算法和计算机科学中,"魔方-BFS-输入_魔方bfs_魔方降群法+双向bfs_魔方降群_"这个标题涉及到的是使用广度优先搜索(Breadth First Search, BFS)解决魔方问题的高级技巧。魔方是一种三维旋转拼图...

    广度优先检索 BFS.zip

    **广度优先搜索(BFS)**是一种在图或树数据结构中进行遍历或搜索的算法,其基本思想是从根节点开始,按照层次顺序依次访问每个节点。它首先访问最近的节点,然后逐渐扩展到更远的节点。在有向图中,BFS依然按照层次...

    BFS.rar_bfs_bfs matlab_bfs matlab

    标题中的"BFS.rar_bfs_bfs matlab_bfs matlab"提到了"BFS"以及与MATLAB相关的优化算法。BFS,全称为Breadth-First Search(广度优先搜索),通常用于图论或树结构的遍历。在MATLAB环境中,BFS可以被应用于解决各种...

    代码 基于BFS广度优先搜索算法代码

    代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...

    八数码BFS,DFS,BBFS,Astar实现

    该问题常用于演示搜索算法,如宽度优先搜索(BFS)、深度优先搜索(DFS)、双向宽度优先搜索(BBFS)以及A*搜索。 首先,**宽度优先搜索(BFS)**是一种按层进行搜索的算法,它会优先检查离起点近的解。在八数码...

    simulink BFSK仿真

    标题"simulink BFSK仿真"表明我们要探讨的是使用Simulink进行二进制频移键控(Binary Frequency Shift Keying, BFSK)的模拟与仿真。BFSK是一种数字调制技术,通过改变载波频率来传输二进制数据(0或1)。在Simulink...

    bfsk程序代码matlab

    标题“bfsk程序代码matlab”指的是使用MATLAB语言实现的BFSK(Binary Frequency Shift Keying,二进制频率移键控)编码技术的程序代码。BFSK是一种数字调制方法,通过改变载波频率来传输二进制数据,其中“0”和“1...

    基于BFS的贪吃蛇

    在本文中,我们将深入探讨如何使用宽度优先搜索(BFS)算法实现经典的“贪吃蛇”游戏。贪吃蛇是一款非常流行的电子游戏,玩家需要控制一个不断移动的蛇去吃食物,每次吃到食物,蛇的长度就会增加,游戏区域也会相应...

    DFS \BFS生成树

    根据给定文件中的标题“DFS \BFS生成树”、描述以及部分代码内容,我们可以提炼出以下几个关键知识点:邻接表、深度优先搜索(Depth-First Search, DFS)、广度优先搜索(Breadth-First Search, BFS)以及如何利用这...

    BFSK的误码率曲线的MATLAB代码

    在本话题中,我们将深入探讨BFSK的基本原理,以及如何利用MATLAB软件来模拟和计算BFSK系统的误码率曲线。 首先,让我们理解BFSK的工作原理。BFSK是FSK(频移键控)的一个变种,它使用两个不同的载波频率来代表二...

    bfs.rar_Bfs算法_bfs

    宽度优先搜索(BFS,Breadth-First Search)是一种用于遍历或搜索树或图的算法,它从根节点开始,沿着树的宽度方向进行探索,直到找到目标节点或者遍历完整个树。在图中,BFS通常用于找出两个节点间的最短路径,或者...

    bfs.rar_BFS+c++_bfs

    **标题中的“bfs.rar_BFS+c++_bfs”表明这是一个关于C++实现BFS算法的压缩包文件,可能包含了一个名为“bfs”的源代码文件。** **描述中的“this is code for bfs in c++”进一步确认了这个压缩包内代码的主要功能...

    动态内存+BFS

    ### 动态内存+BFS知识点解析 #### 一、程序概览 本程序主要通过结合动态内存分配与广度优先搜索(BFS)算法来解决一个图论问题:即在一个无向图中寻找从起点到其他各顶点的路径顺序。程序首先读入测试用例的数量,...

    bfs.tar.gz_C#BFS_bfs

    【标题】"bfs.tar.gz_C#BFS_bfs" 提供的是一个使用C#实现的广度优先搜索(BFS)算法的代码压缩包。这个压缩包中的内容主要是关于如何在并行计算环境中,利用CUDA(Compute Unified Device Architecture)技术来优化...

    BFS.rar_bfs

    标题中的"BFS.rar_bfs"指的是使用BFS(Breadth-First Search,宽度优先搜索)算法的一个程序或项目,这个项目的压缩包被命名为"BFS.rar",可能包含了实现BFS算法的源代码、报告文档以及编译后的可执行文件。...

    bfs.tcl.tar.gz_BFS algorithm_bfs_bfs matlab_bfs matlab

    **广度优先搜索(BFS)算法** 广度优先搜索(BFS)是一种在图或树数据结构中进行遍历的算法,它按照从根节点开始,先访问所有相邻节点,然后依次对每个已访问节点的相邻节点进行访问的原则进行搜索。在 BFS 中,...

    DFS和BFS的C++实现

    深度优先搜索(DFS,Depth-First Search)和广度优先搜索(BFS,Breadth-First Search)是图论和树形结构中常用的两种遍历算法,它们在计算机科学中有着广泛的应用,如解决迷宫问题、网络爬虫、社交网络分析、最短...

    BFS.zip_Bfs算法_图BFS算法

    **BFS算法详解** 在计算机科学中,图遍历是一种重要的算法,用于探索图的所有节点。其中,广度优先搜索(Breadth-First Search,简称BFS)是一种按照节点的层次顺序遍历图的方法。BFS算法尤其适用于寻找最短路径、...

    算法之BFS与DFS

    **算法之BFS(广度优先搜索)与DFS(深度优先搜索)** 在计算机科学中,图论和算法是至关重要的部分,而BFS(广度优先搜索)和DFS(深度优先搜索)是两种最基础且广泛使用的图遍历算法。它们在解决各种问题时起到...

Global site tag (gtag.js) - Google Analytics