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. js 多选题选项内容显示在标题下

    <body><div class="page-container"> <div class="view-container"> ...

  2. C# 以管理员方式启动Winform,进而使用管理员控制Windows Service

    问题起因: 1,) 问题自动分析Windows服务在正常运行时,确实会存在程序及人为原因导致该服务停止.为了在应用程序使用时确保该服务正常运行,于是有了该讨论主题. 2,)一般账户(尽管是管理员组账户 ...

  3. python入门到精通[一]:搭建开发环境

    摘要:Python认识,及在windows和linux上安装环境,测试是否安装成功. 1.写在前面 参加工作也有5年多了,一直在做.net开发,近一年有做NodeJS开发.从一开始的不习惯,到逐步适应 ...

  4. html 标签内部元素左右居中

    <div style="width: 500px; height: 500px; border: 1px solid red; text-align: center;"> ...

  5. csuoj 1396: Erase Securely

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1396 1396: Erase Securely Time Limit: 1 Sec  Memory ...

  6. shell学习笔记(2)替换命令··与()的区别

    ·CMD·在执行的时候,shell不管··中的内容是什么,先进性解释,再把解释后的最终结果送给shell,如果解释后的结果不是shell可以行的命令,就会报错.但是仅仅把cmd的执行结果作为文本输出, ...

  7. C++之路进阶——codevs4655(序列终结者)

    4655 序列终结者  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master      题目描述 Description 网上有许多题,就是给定一个序列,要你支持几 ...

  8. hdu4918 Query on the subtree

    树分治,设当前树的分治中心为x,其子树分治中心为y,则设father[y]=x,分治下去则可以得到一颗重心树,而且树的深度是logn. 询问操作(x,d),只需要查询重心树上x到重心树根节点上的节点的 ...

  9. demo15 AlertDialog

    Dialog dialog = new AlertDialog.Builder(this).setTitle("对话框").setMessage("this is msg ...

  10. 在C#中使用LOG4NET(winform程序

    http://www.csharpwin.com/csharpspace/678.shtml 1.下载log4net (Google log4net) 2.unzip log4net 3.运行VS,新 ...