链接:https://ac.nowcoder.com/acm/contest/1/C
来源:牛客网

安卓图案解锁
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

栗主席(lizi)是某xxxx大学的一个不得了的程序猿,然而没想到吧,他竟然有女盆友,我们假设为QAQ!!!
那天,QAQ问栗子:你的小米5s的图像解锁密码到底是多少?
栗子:嘛?我仔细想想...   
QAQ:你仿佛在逗我...
...
栗子:我的图像解锁用过好多次密码,后来都是用指纹解锁,所以忘记密码辣。但是我记得可能是那几个密码
QAQ:那你务必告诉我...
栗子: ...
然后,栗子就写下了一堆可能的密码,安卓图案解锁中,数字对应的位置已经标出。
但是栗子当然不想把真正的密码告诉QAQ,所以给QAQ的一系列的密码中,甚至有一些密码,是不符合安卓图案解锁的规则的。
QAQ也知道栗子肯定不老实,给了很多错的密码,甚至不符合规则的密码,所以想请你来找出,哪些密码是不符合规则的。
安卓图案解锁的密码有这样的一些特点:
1.每个数字最多只会被使用一次。
2.如果想直接连接两个数字,但是线段中会经过另一个数字,当且仅有那个数字已经在之前就被使用过了,才会合法。(比如你想从1直接连接到9,那么要么是1->3->9,要么是3在之前已经被使用过了,然后才能直接从1->9)

输入描述:

多组输入
每组输入占一行,包含一串数字(1~9),长度不超过30

输出描述:

输出这个安卓图案解锁是否合法,如果合法输出"YES",反之输出"NO" (请参照样例输出,不要输出引号)
示例1

输入

复制

14569
1953
15963
15953

输出

复制

YES
NO
YES
NO

思路:建立 一个二维数组 isok[i][j] 代表 从i走到j是否能走。用一个数组 cnt[i] 来记录数字i在字符串中出现的次数。

然后直接模拟即可。(题目中有错误的描述, 1-3-9 应该是 1-5-9 ) 出题人也不改题面,无奈啊。细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
char s[200];
int isok[11][11];
int cnt[11];
int main()
{// freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);while(cin>>s){int len=strlen(s);// if(len>9)// {//     cout<<"NO"<<endl;//     continue;// }int flag=1;repd(i,1,9){cnt[i]=0;repd(j,1,9){isok[i][j]=1;}}isok[1][3]=isok[3][1]=0;isok[9][3]=isok[3][9]=0;isok[9][7]=isok[7][9]=0;isok[1][7]=isok[7][1]=0;isok[1][9]=isok[9][1]=0;isok[7][3]=isok[3][7]=0;isok[4][6]=isok[6][4]=0;isok[2][8]=isok[8][2]=0;int last=s[0]-'0';int x;x=last;cnt[x]++;if(x==2){isok[1][3]=isok[3][1]=1;}else if(x==4){isok[1][7]=isok[7][1]=1;}else if(x==5){isok[4][6]=isok[6][4]=1;isok[2][8]=isok[8][2]=1;isok[3][7]=isok[7][3]=1;isok[1][9]=isok[9][1]=1;}else if(x==6){isok[3][9]=isok[9][3]=1;}else if(x==8){isok[7][9]=isok[9][7]=1;}rep(i,1,len){x=s[i]-'0';cnt[x]++;if(!isok[last][x]){flag=0;break;}else{if(x==2){isok[1][3]=isok[3][1]=1;}else if(x==4){isok[1][7]=isok[7][1]=1;}else if(x==5){isok[4][6]=isok[6][4]=1;isok[2][8]=isok[8][2]=1;isok[3][7]=isok[7][3]=1;isok[1][9]=isok[9][1]=1;}else if(x==6){isok[3][9]=isok[9][3]=1;}else if(x==8){isok[7][9]=isok[9][7]=1;}}last=x;}repd(i,1,9){if(cnt[i]>1){flag=0;}}if(flag){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/10994855.html

长沙理工大学第十二届ACM大赛-重现赛C 安卓图案解锁 (模拟)相关推荐

  1. 长沙理工大学第十二届ACM大赛-重现赛I 主持人的烦恼 (sort)

    链接:https://ac.nowcoder.com/acm/contest/1/I 来源:牛客网 主持人的烦恼 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  2. 长沙理工大学第十二届ACM大赛-重现赛 K - 大家一起来数二叉树吧

    题目描述 某一天,Zzq正在上数据结构课.老师在讲台上面讲着二叉树,zzq在下面发着呆. 突然zzq想到一个问题:对于一个n个节点,m个叶子的二叉树,有多少种形态呐?你能告诉他吗? 对于第一组样例的解 ...

  3. 长沙理工大学第十二届ACM大赛-重现赛

    年轮广场 时间限制:1秒 空间限制:131072K 题目描述 在云塘校区,有一个很适合晒太阳的地方----年轮广场 年轮广场可以看成n个位置顺时针围成一个环. 这天,天气非常好,Mathon带着他的小 ...

  4. 长沙理工大学第十二届ACM大赛-重现赛 L - 选择困难症

    题目描述 小L有严重的选择困难症. 早上起床后,需要花很长时间决定今天穿什么出门. 假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度. 小L ...

  5. 长沙理工大学第十二届ACM大赛 D 小M和天平

    题目描述 小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边.他现在知道每个石子的重量.问能不能根据上述条件,能不能测出所问的重量. 输入描述: ...

  6. 长沙理工大学第十二届ACM大赛 I.主持人的烦恼【贪心】

    题目描述 一天zzq主持一项游戏,共n位同学,需要两两同学为一组来上台来玩一项游戏. 但是,众所周知,玩游戏的时候,如果两个人的颜值差距>=m,就会互相嫌弃. 所以,为了游戏能够好玩.在游戏开始 ...

  7. 山东理工大学第十二届ACM程序设计竞赛 - Cut the tree(树上启发式合并+线段树)

    题目链接:点击查看 题目大意:给一个具有 N 个节点的有根树,以 1 号节点为根,节点编号从 1 开始,点有点权.树的第 H 层权值为深度为 H 的所有点的点权之和.树的总权值为所有层权值的最大值.问 ...

  8. 2021年第十二届蓝桥杯省赛 Java B组 第一场 全部题解

    暴力杯?dp杯! 重铸国二荣光,省三义不容辞 感谢评论区的大佬给出的思路还有指正的一些错误地方,现都已更正,当然如果还有其他更优解法的也欢迎评论区指出 c/c++和Java的B组题目都已更新,正在备考 ...

  9. 郑州大学计算机系王院长,我院成功承办河南省第十二届ACM大学生程序设计竞赛...

    5月6日至7日,由河南省计算机学会主办.我校承办的河南省第十二届ACM大学生程序设计竞赛在体育中心隆重举行.来自全省45所高校的231支参赛队近700名学生及200名带队教练参加了竞赛,参赛院校.参赛 ...

最新文章

  1. 条件变量pthread_cond_wait()和pthread_cond_signal()详解
  2. Java开发者跳槽必备:2021阿里Java面试题目大汇总
  3. SQL Server Extended Events (扩展事件)
  4. Oracle中根据表明获取对应表触发器名称
  5. 体验Windows Azure的Access Control Service
  6. 信息抽取(五)实体命名识别之嵌套实体识别哪家强,我做了一个简单的对比实验
  7. VS2010下使用dmp文件和pdb文件定位到dll中崩溃位置的方法
  8. java 实现 tcp_java实现TCP通信
  9. 漫画:三分钟了解敏捷开发
  10. 【转】DICOM:DICOM Print服务中PresentationContext协商之 MetaSOPClass与SOPClass对比分析!!!!!!!!
  11. STL源码剖析 入门开始 STL概论与版本简介
  12. catalog java,Java Connection getCatalog()方法与示例
  13. 计算机组成原理试卷分析,《计算机组成原理与汇编语言》试卷分析报告.doc.docx...
  14. grads插值_利用grads描述文件中的pdef做插值的实用方法,转模式的同学看过来~~...
  15. 项目分享之敲击床头盒控制床头灯的开关
  16. vip.163邮箱登录指南,163vip邮箱体验分享
  17. 服务器怎么买,腾讯云服务器购买三种流程介绍
  18. 最全数学各个分支简介
  19. Fiddler中Response 的Raw乱码问题解决
  20. 深度技术ghost win8 32位/64位装机旗舰版V2014

热门文章

  1. 工作八年总结(转载)
  2. ACM PKU1703 Find them, Catch them
  3. 【uoj#139】[UER #4]被删除的黑白树 贪心
  4. toLua关于委托没有注册的解决方案
  5. TFBOY 养成记 一些比较好多文章。
  6. maven工程如何引用css和js文件
  7. 2018秋寒假作业5—PTA编程总结2
  8. go语言学习笔记(2)命令源码文件
  9. Chrome Console Cookie 控制台操作命令
  10. Xtrabackup的“流”及“备份压缩”功能