zoukankan      html  css  js  c++  java
  • 2018/7/31-zznu-oj-问题 F: 手机密码--【裸dfs+for循环即可!——据说三个小时内只有两个人读完了题意并轻松AC了】

    问题 F: 手机密码

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 41  解决: 23
    [提交] [状态] [讨论版] [命题人:admin]
    题目描述
    
    手机安全问题是大家经常关心的一个问题。
    在生物解锁没有出现之前,人们通常有两种方式设置手机密码:九宫格密码和数字密码。
    我们先来简化一下这两种密码的格式:
    对于九宫格密码:
    1.至少连接4个以上不同的圆点。
    2.只能连接相邻(八方向)的圆点,且每个圆点只能通过一次。
    3.密码的长度定义为经过的圆点数。
    对于数字密码:
    1.至少含有四个数字。
    2.密码长度定义为字符数。
    现在,我们来尝试用枚举来破解这两种密码,当然我们可以提前获知一些消息:
    1.你可以通过观察对方解锁手机所用的时长,大致推断出对方的密码长度,
    2.在通常情况下,我们可以很轻松的得到密码第一位的信息,因为它最常被触碰比较油腻。而后,你来计算一下,对于这两种密码,最差我们需要枚举多少次,才能解开这组密码。
    
    输入
    
    出入包含四个整数n,a,x,y,
    正整数n代表密码长度,
    整数a代表数字密码的一位,
    正整数(x,y),代表九宫格密码第一个经过的圆点的坐标
    输入已EOF结束 
    
    输出
    
    输出包含两个正整数,分别代表最差尝试几次可以破解九宫格密码,和数字密码
    
    样例输入
    
    4 1 1 1
    
    样例输出
    
    50 1000
    
    
    提示
    
    九宫格密码的左上角坐标为(11

    思路:

    有点长的题目,裸DFS,暴力一遍OK!

    题解代码:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<string>
     5 #include<vector>
     6 #include<algorithm>
     7 #define ll long long
     8 using namespace std;
     9 #define N 10000
    10 #define ll long long
    11 int mp[4][4];//(1,1)--(3,3)
    12 int ans1;
    13 int dir[8][2]={ {0,1},{1,0},{0,-1},{-1,0},{1,-1},
    14             {1,1},{-1,1},{-1,-1}  };
    15 int vis[10][10];
    16 int n;
    17 void dfs(int x,int y,int step){
    18     if(step==n)
    19     {
    20         ans1++;return ;
    21     }
    22     for(int i=0;i<=7;i++){
    23         int dx,dy;
    24         dx=x+dir[i][0];
    25         dy=y+dir[i][1];
    26         if(dx>=1&&dy>=1&&dx<=3&&dy<=3&&!vis[dx][dy]){
    27             vis[dx][dy]=1;
    28             dfs(dx,dy,step+1);
    29             vis[dx][dy]=0;
    30         }
    31     }
    32 
    33 }
    34 int main()
    35 {
    36    int beg,x,y;
    37     while(scanf("%d%d%d%d",&n,&beg,&x,&y)!=EOF){
    38        ans1=0;
    39       ll ans2=1;
    40        memset(vis,0,sizeof(vis));
    41 
    42        vis[x][y]=1;
    43        dfs(x,y,1);
    44 
    45        for(int i=2;i<=n;i++)
    46             ans2*=10;
    47 
    48         printf("%d %lld
    ",ans1,ans2);
    49     }
    50 
    51 
    52     return 0;
    53 }
    View Code

    题意不可怕,可怕的是盲目追榜单233~~

  • 相关阅读:
    十年经验大牛浅谈自动化测试与测试用例的编写
    从功能测试到自动化测试,携程大牛总结一些工作经验分享
    阿里大牛谈软件测试面试的几个建议
    记一个Selenium自动化测试网页
    腾讯大牛教你简单的自动化测试模型(Python+Selenium)
    阿里大牛教你基于Python的 Selenium自动化测试示例解析
    携程大牛谈自动化测试里的数据驱动和关键字驱动思路的理解
    论:关于自动化测试的前期发展历史及未来发展趋势
    阿里大牛教你一分钟了解自动化测试
    绑定银行卡的一些细节
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9399555.html
Copyright © 2011-2022 走看看