Yet Another Multiple Problem
模型转换 BFS搜索 根据剩余类建图广搜
K -Yet Another Multiple Problem点击打开链接
此题如果处理得不好可能会造成非常多的特殊情况需要特判。一种比较简洁的处理方法是:首先建有向图i->(i*10+j)%n,然后沿着这个图反向从0'广搜0算出每个点到0的最短距离,最后从0开始沿着这个图正向广搜,利用刚才的最短距离表直接递推出答案的每一位。另一种处理方法是直接用string记录答案,不过要注意常数。时间复杂度每组数据O(n)。
题意:
给一个N(n<=1e4), M个数字(长度为1),问最小的数x(x%n=0) 不包含这m个数。
思路:
直接求,没想出解法.
对于一个数 x%n = m, 则 x` = x*10+i , 有 m` = (m*10+i)%n
我们可以利用 除了M个数字外的 数来构造这个 X.
因为需要最小的, 则其长度与字典序排列皆最小. 通过BFS进行搜索. 每一个 模n的余数之取第一次出现的,
因为之后再出现的. 只可能更长或者更大. 必定不是最优解.
搜索节点,保存三个信息: 当前x的最后一位, 当前x%n的余数, 当前节点的父亲节点.
结果输出利用记忆父亲节点 ,然后递归输出即可.
[cpp]
// File Name: hdu4474.cpp
// Author: rudolf
// Created Time: 2013年04月26日 星期五 14时06分16秒
#include
#include
#include
// File Name: hdu4474.cpp
// Author: rudolf
// Created Time: 2013年04月26日 星期五 14时06分16秒
#include
#include
#include
using namespace std;
int N,M;
char hav[15];
char vis[10005];
struct node
{
int mod,f;// mod表示对N取余后的值,f表示父亲节点的编