题目描述

话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个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

吐槽

  看题面应该是某次比赛的题目之一,比赛的题目背景都是连贯的,打比赛一大乐趣就是欣赏各种有趣的题目背景了。

  被搬到公共题库后,题目背景就支离破碎了。丧失了读题目背景的乐趣,实在是一种损失……

解题思路

  乍一看题,感觉是一道普通的数位搜索,类似USACO1.5中一道名为 特殊的质数肋骨(Superprime Rib)的搜索题。

  于是按照题意敲了一波广搜,每次拓展时按照0、1、2…k-1的顺序在已有数字后面接数字,这样就能保证搜索到的数字是递增出现的,第一个搜到的满足条件的数字一定是最小的。交上去得了80分,一看,两个点WA,输出负数,应该是溢出了。把int改成long long,90分,还是WA了一个点,依然溢出。换成__int128,交上去还是90,然而那个不过的点TLE了……随着数位的增多,搜到的数是成指数型增长的啊……

  瞄了一眼题解

  这题正解可以是这样——在广搜时,队列里的每个元素由一个高精度的数(字符串)和那个数模m的值。拓展节点时,如果拓展得到的余数为零,直接返回输出即可,要是这个余数不为零且之前没有出现过,就加入队列,之前出现过,就舍弃吧。我不太明白为何出现过的相同的余数不用加入队列,是他们拓展结果重复吗?先留坑

源代码

#include<queue>
#include<cstdio>
#include<string>
#include<iostream>
int k,m;
struct Node{
int yu;
std::string s;
}n[],temp;
bool used[]={};
Node bfs()
{
std::queue<Node> q;
for(int i=;i<k;i++)
{
temp.yu=i%m;
temp.s="";
temp.s+=i%m+'';
q.push(temp);
used[i%m]=;
}
while(!q.empty())
{
temp=q.front();
q.pop();
for(int i=;i<k;i++)
{
Node v=temp;
v.s=temp.s;
v.s+=i+'';
v.yu=(temp.yu*+i)%m;
if(v.yu==) return v;
if(!used[v.yu]) q.push(v),used[v.yu]=;
}
}
} int main()
{
scanf("%d%d",&k,&m);
std::cout<<bfs().s;
return ;
}

洛谷 P1602 Sramoc问题的更多相关文章

  1. 洛谷P1602 Sramoc问题

    P1602 Sramoc问题 题目描述 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐 ...

  2. 洛谷——P1602 Sramoc问题

    P1602 Sramoc问题 $bfs$搜索 保证第一个搜到的符合条件的就是最小的 #include<bits/stdc++.h> #define N 110000 using names ...

  3. 洛谷P1602 Sramoc问题 题解报告【同余+bfs】

    题目描述 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问团的成员,YQ ...

  4. 洛谷 1602 Sramoc问题

    Description 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问 ...

  5. 洛谷1602 Sramoc问题

      刚看到这道题的时候感觉像spfa. 然后发现其实bfs就可以做了. //Serene #include<algorithm> #include<iostream> #inc ...

  6. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  7. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  8. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

随机推荐

  1. 【数据结构】链式向前星知识点&代码

    代码: struct NODE{ int to; int nxt; int c; }node[MM];//链式向前星 ; void add(int a,int b,int c){ node[lcnt] ...

  2. luogu2577 [ZJOI2005] 午餐 贪心

    题目大意 THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭.每个人打完饭后立刻开始吃,所有人都吃 ...

  3. luogu1345 奶牛的电信

    拆点.最小割的模板题. 我只想说一点.拆点时不可以下意识地初始化!起点和终点不能直接写编号!写拆点后的Id! #include <cstdio> #include <cstring& ...

  4. Flink之DataStreamAPI入门

    目录 Types Transformations Defining UDFs 本文API基于Flink 1.4 def main(args: Array[String]) { // 第一种会自动判断用 ...

  5. c++之——————各种变量

    对我们程序员来讲,“变量”和“对象”是可以相互互换使用的.-------------开篇之词. 变量:提供一个具有名字的可供程序操作的存储空间.由类型说明符和其后紧跟的数个列表组成,其中变量名之间使用 ...

  6. Labeling Balls(拓扑)

    http://poj.org/problem?id=3687 看题意看了半天没看懂怎么回事,看完Discuss彻底凌乱了..后来看了题解才懂,就是逆向建图+拓扑排序,建图时要判重边. #include ...

  7. python 46 盒模型 与盒模型布局

    一:盒模型 1.  盒模型的概念 广义盒模型:文档中所有功能性及内容性标签,及文档中显示性标签 侠义盒模型:文档中以块级形式存在的标签(块级标签拥有盒模型100%特性且最常用) 盒模型组成:margi ...

  8. go 条件语句if

    一.if 语句 格式 if condition { // do something } 举例 package main import "fmt" func main(){ var ...

  9. Winform 异步调用2 时间

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. POJ 1753 DFS

    思路: 有过两个裸搜的思路,第一个一个无限TLE,第二个还不慢... 错误思路:迭代加深搜索,枚举翻第几个棋,挂的原因:16的16次方,不挂就怪了. 错误代码见下: #include <cstd ...