3861 - Valid Pattern Lock

Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu

Description

Pattern lock security is generally used in Android handsets instead of a password. The pattern lock can be set by joining points on a 3 × 3 matrix in a chosen order. The points of the matrix are registered in a numbered order starting with 1 in the upper
left corner and ending with 9 in the bottom right corner.

A valid pattern has the following properties:

  • A pattern can be represented using the sequence of points which it's touching for the first time (in the same order of drawing the pattern). And we call those points as active points.
  • For every two consecutive points A and B in the pattern representation, if the line segment connecting A and B passes through some other points, these points must be in the sequence also and comes before A and B, otherwise the pattern will be invalid.
  • In the pattern representation we don't mention the same point more than once, even if the pattern will touch this point again through another valid segment, and each segment in the pattern must be going from a point to another point which the pattern didn't
    touch before and it might go through some points which already appeared in the pattern.

Now you are given n active points, you need to find the number of valid pattern locks formed from those active points.

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

The first line contains an integer n (3 ≤ n ≤ 9), indicating the number of active points. The second line contains n distinct integers a1a2, … an (1
≤ ai ≤ 9) which denotes the identifier of the active points.

Output

For each test case, print a line containing an integer m, indicating the number of valid pattern lock.

In the next m lines, each contains n integers, indicating an valid pattern lock sequence. The m sequences should be listed in lexicographical order.

Sample Input

1
3
1 2 3

Sample Output

4
1 2 3
2 1 3
2 3 1
3 2 1

#include <iostream>
#include <cmath>
#include <stdio.h>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <iomanip>
#include <algorithm>
#include <memory.h>
using namespace std;
int n;
int a[10];
int may[10];
bool vis[10];
int mp[10][10];
int num;
void init()
{
    memset(mp,0,sizeof(mp));
    mp[1][9]=mp[9][1]=mp[3][7]=mp[7][3]=mp[2][8]=mp[8][2]=mp[4][6]=mp[6][4]=5;
    mp[1][3]=mp[3][1]=2;
    mp[1][7]=mp[7][1]=4;
    mp[7][9]=mp[9][7]=8;
    mp[3][9]=mp[9][3]=6;
}
int ans[400000][10];
void show()
{
    for(int i=0; i<n; i++)
        cout<<may[i]<<' ';
    cout<<endl;
}
bool judge()
{
    int viss[10];
    memset(viss,0,sizeof(viss));
    viss[0]=-1;
    int s1=may[0],s2;
    viss[s1]=1;
    for(int i=1; i<n; i++)
    {
        s2=may[i];
        if(viss[s2]==1)
            return false;
        if(mp[s1][s2]!=0&&viss[mp[s1][s2]]==0)
            return false;
        s1=s2;
        viss[s2]=1;
    }
    for(int i=0; i<n; i++)
    {
        ans[num][i]=may[i];
    }
    num++;
    return true;

}
void dfs(int p)
{
    if(p==n)
    {
        judge();
        return;
    }
    for(int i=0; i<n; i++)
    {
        if(vis[a[i]]==0)
        {
            may[p]=a[i];
            vis[a[i]]=1;
            dfs(p+1);
            vis[a[i]]=0;
        }
    }
}
int main()
{
    init();
    int T;
    cin>>T;
    while(T--)
    {
        num=0;
        cin>>n;
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        dfs(0);
        cout<<num<<endl;
        for(int i=0; i<num; i++)
        {
            for(int j=0; j<n-1; j++)
                printf("%d ",ans[i][j]);
            printf("%d\n",ans[i][n-1]);
        }
    }
    return 0;
}

ZOJ 3861 - Valid Pattern Lock的更多相关文章

  1. DFS+模拟 ZOJ 3861 Valid Pattern Lock

    题目传送门 /* 题意:手机划屏解锁,一笔连通所有数字,输出所有可能的路径: DFS:全排列 + ok () 判断函数,去除一些不可能连通的点:) */ #include <cstdio> ...

  2. ACM学习历程—ZOJ 3861 Valid Pattern Lock(dfs)

    Description Pattern lock security is generally used in Android handsets instead of a password. The p ...

  3. ZOJ - 3861 Valid Pattern Lock 【全排列】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861 思路 先生成全排列,然后判断哪些情况不符合的,剔除就好了 ...

  4. 浙江大学2015年校赛B题 ZOJ 3861 Valid Pattern Lock

    这道题目是队友写的,貌似是用暴力枚举出来. 题意:给出一组数,要求这组数在解锁的界面可能的滑动序列. 思路:按照是否能够直接到达建图,如1可以直接到2,但是1不能直接到3,因为中间必须经过一个2. 要 ...

  5. ZOJ Problem Set - 3861 Valid Pattern Lock(dfs)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3861 这道题当时没做出来,后来经过队友提醒才做出来. 3*3的九宫格,给你 ...

  6. Valid Pattern Lock(dfs + 暴力)

    Valid Pattern Lock Time Limit: 2 Seconds      Memory Limit: 65536 KB Pattern lock security is genera ...

  7. zoj 3861(dfs)

    Valid Pattern Lock Time Limit: 2 Seconds      Memory Limit: 65536 KB Pattern lock security is genera ...

  8. Bypass pattern lock on Sony Xperia Z2 and backup all data

    Yesterday she came to me with a Sony Xperia Z2 D6503. Guess what? She forgot the pattern so she coul ...

  9. Deal with Android phones with pattern lock on

    Yesterday my colleague asked me for help...She has two android phones , one is hTC and the other is ...

随机推荐

  1. php扩展mssql.so连接sqlserver2008

    1.安装配置freetds  wget http://mirrors.xmu.edu.cn/ubuntu/archive/pool/main/f/freetds/freetds_0.82.orig.t ...

  2. ps 简介

    1. ps 简介ps 命令就是最根本相应情况下也是相当强大地进程查看命令.运用该命令可以确定有哪些进程正在运行和运行地状态. 进程 是否结束.进程有没有僵死.哪些进程占用了过多地资源等等.总之大部分信 ...

  3. Beyond Compare

    Beyond Compare是一个比较文件和文件夹的工具.  它可以帮助你找到并协调源代码.文件夹.图像和数据间的差异,即使包括zip文档中或者FTP站点上的文件.  另外它还可以同步化文件夹并验证不 ...

  4. int 与 Integer--话说数组转集合

    话说是自从JDK5后,而这就可以自动进行类型转换了. 当然,区别还是有的,就是对象和“非对象”什么的.可是,今天进行一个测试,出了一个小问题,现将代码贴下: 代码0:先来一个正常点的,用String进 ...

  5. jvm内存设置

    JVM有很多个内存管理命令,总体而言,分为两类: 1.-X开头的管理命令:这些选项在JDK升级时不会通知修改: 2.-XX开头的管理命令:这些选项不够稳定,所以建议少用. JVM参数的含义: 参数名称 ...

  6. 转:python webdriver 环境搭建

    第一节 环境搭建准备工具如下:-------------------------------------------------------------下载 python[python 开发环境]ht ...

  7. csuoj 1337: 搞笑版费马大定理

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337 1337: 搞笑版费马大定理 Time Limit: 1 Sec  Memory Limit ...

  8. CentOS 5.5 Nginx+JDK+MySQL+Tomcat(jsp)成功安装案例

    在CentOS 5.5中安装Nginx+jdk+mysql+tomcat是非常容易的.只需yum安装环境包和nginx.解压安装jdk和tomcat.配置profile文件.server.xml和ng ...

  9. struts2的处理流程_2015.01.05

    01:首先经过web.xml里面的拦截 StrutsPrepareAndExecuteFilter 02:然后struts2内置的一些拦截器或用户自定义拦截器 Interceptor 03:用户编写的 ...

  10. paper 77:[转载]ENDNOTE使用方法,常用!

    一.简介  EndNote是一款用于海量文献管理和批量参考文献管理的工具软件,自问世起就成为科研界的必备武器.在前EndNote时代,文献复习阶段从各大数据库中搜集到的文献往往千头万绪.或重复或遗漏, ...