HDU 5641

King's Phone

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 916    Accepted Submission(s): 261


Problem Description
In a military parade, the King sees lots of new things, including an Andriod Phone. He becomes interested in the pattern lock screen.

The pattern interface is a $3 imes 3$ square lattice, the three points in the first line are labeled as $1, 2, 3$, the three points in the second line are labeled as $4, 5, 6$, and the three points in the last line are labeled as $7, 8, 9$。The password itself is a sequence, representing the points in chronological sequence, but you should follow the following rules:

- The password contains at least four points.


- Once a point has been passed through. It can't be passed through again.

- The middle point on the path can't be skipped, unless it has been passed through($3427$ is valid, but $3724$ is invalid).

His password has a length for a positive integer $k (1le kle 9)$, the password sequence is $s_1,s_2...s_k(0le s_{i} < INT\_MAX)$ , he wants to know whether the password is valid. Then the King throws the problem to you.
 
Input
The first line contains a number&nbsp;$T(0 < T le 100000)$, the number of the testcases.

For each test case, there are only one line. the first first number&nbsp;$k$,represent the length of the password, then $k$ numbers, separated by a space, representing the password sequence $s_1,s_2...s_k$.
 
Output
Output exactly $T$ lines. For each test case, print `valid` if the password is valid, otherwise print `invalid`
 
Sample Input
3
4 1 3 6 2
4 6 2 1 3
4 8 1 6 7
 
Sample Output
invalid valid valid hint: For test case #1:The path $1 ightarrow 3$ skipped the middle point $2$, so it's invalid. For test case #2:The path $1 ightarrow 3$ doesn't skipped the middle point $2$, because the point 2 has been through, so it's valid. For test case #2:The path $8 ightarrow 1 ightarrow 6 ightarrow 7$ doesn't have any the middle point $2$, so it's valid.
 
Source
挂终测了  继续掉分 一回解  orzzzz 最近 太忙
题意: 给你一段序列 问是否为合法的解锁序列(模拟手机手势解锁)
 
满足条件 1.至少4个数字 数量为[4,9]  2.不能重复 3.不能跳跃 4.数字的范围为[1,9]
还有记得每次的初始化
 
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<map>
 5 #include<queue>
 6 #include<stack>
 7 #include<set>
 8 using namespace std;
 9 int t;
10 int a[10];
11 int mp[10][10];
12 map<int,int> mpp;
13 int jishu=0;
14 void init()
15 {
16     mp[1][3]=1;
17     mp[1][7]=1;
18     mp[1][9]=1;
19     mp[2][8]=1;
20     mp[3][1]=1;
21     mp[3][9]=1;
22     mp[3][7]=1;
23     mp[4][6]=1;
24     mp[6][4]=1;
25     mp[7][1]=1;
26     mp[7][9]=1;
27     mp[7][3]=1;
28     mp[8][2]=1;
29     mp[9][3]=1;
30     mp[9][7]=1;
31     mp[9][1]=1;
32 }
33 int main()
34 {
35     scanf("%d",&t);
36 
37     init();
38     for(int i=1;i<=t;i++)
39     {
40          scanf("%d",&jishu);
41          memset(a,0,sizeof(a));
42          int maxn=0;
43          int flag=1;
44          for(int j=1;j<=jishu;j++)
45             {
46                 scanf("%d",&a[j]);
47                 if(a[j]>maxn)
48                     maxn=a[j];
49                 if(a[j]<=0)
50                     flag=0;
51             }
52         mpp.clear();
53         if(jishu<4||jishu>9||maxn>9||flag==0)
54             printf("invalid
");
55         else
56         {   int re=0;
57             mpp[a[1]]=1;
58             for(int j=1;j<jishu;j++)
59             {
60                 if(mpp[a[j+1]]==0)
61                {
62                  if(mp[a[j]][a[j+1]]==0)
63                     re++;
64                 else
65                 {
66                     if(mpp[(a[j]+a[j+1])/2])
67                         re++;
68                 }
69                }
70                 mpp[a[j+1]]=1;
71 
72             }
73             if(re==jishu-1)
74                 printf("valid
");
75             else
76                 printf("invalid
");
77         }
78     }
79     return 0;
80 }
View Code
原文地址:https://www.cnblogs.com/hsd-/p/5271727.html