密码宝盒

时间限制:2000 ms  |  内存限制:65535 KB

难度:3

描述

小M得到了一个宝盒,可惜打开这个宝盒需要一组神奇的密码,然而在宝盒的下面

有关于密码的提示信息:密码是一个C进制的数,并且只能由给定的M个数字中的某些构成,密码不超过500位,同时密码是一个给定十进制整数N的正整数倍,

如果这样的密码存在,那么你就可以打开宝盒并得到宝贝,如果不存在

这样的密码......那你就只能收藏这个宝盒了.

输入

输入一个T,表示有T组测试数据,(T≤500)
接下来输入N,C,M(N,C,M如上所述)( 0≤N≤5000, 1≤M≤16 , 2≤C≤16 )
然后M个数,表示密码中含有哪些数字。(输入保证合法)
用A来表示10, B来表示11, C来表示12 , D来表示13, E来表示14, F来表示15

输出

输出:密码如果存在,输入最小的那个为密码,不存在”So Sorry.”(密码不含前导零)

样例输入

3

22 10 3

7 0 1

2 10 1

1

25 16 3

A B C

样例输出

110

So Sorry.

CCB

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;

//借鉴大神思路, 模拟除法算数运算可知若出现相同余数则出现循环,固可用余数标记搜索状态
//mark标记,pre为找答案记录路径,ansAt:res为i时所取得num
int mark[5005],pre[5004],ansAt[5005],N,C,M,num[20];
char ans[5005];//记录答案

char itoc(int i)
{
return i<10?(i+'0'):(i+'A'-10);
}

int ctoi(char i)
{
return i>='0'&&i<='9'?(i-'0'):(i-'A'+10);
}

bool bfs()
{
queue<int> q;
q.push(0);
while(!q.empty())
{
int temp=q.front();
q.pop();
for(int i=0;i<M;++i)
{
int res=(temp*C+num[i])%N;//余数相同即为重复搜索
if(!mark[res]&&!(!temp&&!num[i]))//注意此处temp和num同时为0时不能用余数判断
{
mark[res]=true;
ansAt[res]=num[i];
pre[res]=temp;
if(res==0)//若余数为0则可整除,找到答案
return true;
q.push(res);
}
}
}
return false;
}

bool check()
{
int temp=pre[0],i=0;
ans[i++]=itoc(ansAt[0]);

while(temp) //根据pre和ansAt构造结果
{
ans[i++]=itoc(ansAt[temp]);
temp=pre[temp];
}
ans[i]=0;
if(i<=500) //正确结果不大于500位
return true;

return false;
}

int main()
{
int T;
string str;
cin>>T;
while(T--)
{
memset(mark,false,sizeof(mark));
memset(pre,0,sizeof(pre));

cin>>N>>C>>M;
for(int i=0;i<M;++i)
{
cin>>str; //输入的可能会有16进制的字符,所以输入时定义为string类型,在转换为int型
num[i]=ctoi(str[0]); //char->int;当输入的小于10的时候,每输入一次只有一个数字,即
//也就是第一个字符str[0],当时字母是,同理
}

sort(num,num+M); //排序为了从小到大搜索

if(N==0)
{
if(num[0]==0) //为0是要特判
cout<<'0'<<endl;
else
cout<<"So Sorry."<<endl;

continue;
}

if(bfs()&&check()) //搜到且长度合法
{
for(int i=strlen(ans)-1;i>=0;--i)
cout<<ans[i];

cout<<endl;
}
else
cout<<"So Sorry."<<endl;
}
return 0;
}

别人的没看太懂。。先存了吧

nyoj 密码宝盒的更多相关文章

  1. 玄机宝盒v1.6.1.1

    最新版本:玄机宝盒v1.6.1.1 玄机宝盒v1.6.1.1 04-14/2016 给你的将是无与伦比的体验http://bbs.msdn5.com/thread-15-1-1.html(出处: 玄机 ...

  2. 如何从视频中分离出音乐,和对音乐做分割,合并的处理(瑞典音乐家-新八宝盒.mp3.rar下载)

    点击下载:瑞典音乐家-新八宝盒.mp3.rar 1.工具 Total Video Converter 3.71 视频处理(安装软件,有绿色版的) MP3剪切器 MP3剪切器(小工具) Mp3mateP ...

  3. python自动化开发-[第九天]-异常处理、进程

    今日概要: 1.异常处理使用 2.进程 3.paramiko模块使用 一.异常处理 1.常见的错误异常 #错误异常一 print(a) #NameError #错误异常二 int('sdadsds') ...

  4. Python之路【第十一篇】: 进程与线程

    阅读目录 一. cpython并发编程之多进程1.1 multiprocessing模块介绍1.2 Process类的介绍1.3 Process类的使用1.4 进程间通信(IPC)方式一:队列1.5 ...

  5. 搞笑OI

    OI难 噫吁嚱,维护难哉!OI之难,难于上青天!哈希及DP,代码何茫然!尔来一千两百A,不见金牌背后难.西当华师有考场,可以横绝CN巅.编译不过壮士死,然后超时爆内存相钩连.上有自主招生之高标,下有由 ...

  6. 汕尾6397.7539(薇)xiaojie:汕尾哪里有xiaomei

    汕尾哪里有小姐服务大保健[微信:6397.7539倩儿小妹[汕尾叫小姐服务√o服务微信:6397.7539倩儿小妹[汕尾叫小姐服务][十微信:6397.7539倩儿小妹][汕尾叫小姐包夜服务][十微信 ...

  7. 介绍一些chrome 好用的插件和快捷键

    1.AdBlock ★★★ 最受欢迎的Google 浏览器扩充功能,拥有超过8 百万位使用者!阻挡网路上所有的广告. 2.印象笔记 -剪裁 无需多说! 3.豆藤 Bean vine ★★★★ 豆瓣有此 ...

  8. CSDDN特约专稿:个性化推荐技术漫谈

    本文引自http://i.cnblogs.com/EditPosts.aspx?opt=1 如果说过去的十年是搜索技术大行其道的十年,那么个性化推荐技术将成为未来十年中最重要的革新之一.目前几乎所有大 ...

  9. 【JAVA 文件概述】

    一.概述 使用此类的原因: 该类将文件或者文件夹封装成对象.方便对文件与文件夹的属性信息进行操作.File对象作为参数传递给流的构造函数.要求:使用File类的常用方法. windows平台下,目录分 ...

随机推荐

  1. laravel 异常深度解析

    一.前言 做一件事,不仅要知其然,更要知其所以然.大部分的人都生活在别人设计的世界里,不是没有能力去更深一层,更进一步,而是因为自己懒得去思考.也许自己现在要做的就是:不要让自己舒服吧. 二.正题 1 ...

  2. OC 设计模式

    设计模式 一种或几种被所有程序员广泛认同的,有某些特定功能,或者实现某些特殊作用的编码格式 单例模式 键值编码(KVC) 键值观察(KVO) 观察者模式() 工厂模式(工厂方法) ps:MVC &am ...

  3. react项目打包后路径找不到,项目打开后页面空白的问题

    使用 npm install -g create-react-app快速生成项目脚手架打包后出现资源找不到的路径问题: 解决办法:在package.json设置homepage

  4. Python的数据类型2列表

    Python的数值类型List,也就是列表 Python的列表比较类似与其他语言的数组概念,但他又与其他语言数组的概念有很大的不同 C语言.Java的数组定义是这样的,存储多个同类型的数值的集合就叫数 ...

  5. oracle增加表空间

    select tablespace_name, sum(bytes)/1024/1024 from dba_data_files group by tablespace_name; select ta ...

  6. Oracle 等待事件 db file sequential read

    db file sequential read-数据文件顺序读取 等待事件: "db file sequential read" Reference Note (文档 ID 345 ...

  7. Windows XP系统服役13年今正式退休

    清明已过,服役13年的微软Windows XP系统也于今日正式“退休”.尽管这之后XP系统仍可以继续使用,但微软不再提供官方服务支持.对于中国数以亿计的XP用户来说,一方面是对已经使用了13年的操作系 ...

  8. Obtain older GMT versions

    ftp://ftp.soest.hawaii.edu/gmt/legacy/

  9. 利用Teensy进行em410x卡模拟以及暴力破解em410x类门禁系统

    什么是低频?什么是EM410x? 首先,我不得不再次提一下那些工作在125khz频率下的低频卡(如:EM410X之类的),以便大家更好的阅读以下的内容. 什么是低频?以下就是低频的解释: 低频(LF, ...

  10. php require include 区别

    php提供了两种包含外部文件的方法:include()和require().include()语句是一个常规的php函数:而require() 是一种特殊的语言结构,它的使用受到一些限制.对这两者来说 ...