洛谷P1602 Sramoc问题
题目描述
话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问团的成员,YQ,SC,HQ,经过大量的查阅,大家获得了一些信息,Sramoc ( K , M ) 表示用数字0、1、2…、K-1组成的自然数中能被M整除的最小数。例如 K=2,M=7的时候,Sramoc( 2 , 7 ) = 1001。自然电话号码就是1001,为了尽快将快餐送出,电脑组的童鞋们埋头算起了这个齐葩的号码。。。
输入输出格式
输入格式:
第1行为两个整数 k, m (2≤k≤10, 0≤m≤1000)。
输出格式:
仅1行,那个电话号码(最小的数)。
输入输出样例
输入样例#1:
2 7
输出样例#1:
1001
/* 宽搜,按位枚举 */ #include<queue> #include<cstdio> #include<string> #include<iostream> using namespace std; int k,m; struct Node{ int yu; string s; }n[1010],temp; bool used[1010]={0}; Node bfs(){ queue<Node> q; for(int i=1;i<k;i++){ temp.yu=i%m; temp.s=""; temp.s+=i%m+'0'; q.push(temp); used[i%m]=1; } while(!q.empty()){ temp=q.front(); q.pop(); for(int i=0;i<k;i++){ Node v=temp; v.s=temp.s; v.s+=i+'0'; v.yu=(temp.yu*10+i)%m; if(v.yu==0) return v; if(!used[v.yu]) q.push(v),used[v.yu]=1; } } } int main(){ scanf("%d%d",&k,&m); cout<<bfs().s; return 0; }