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 \times 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 (1\le k\le 9)$, the password sequence is $s_1,s_2...s_k(0\le 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\rightarrow 3$ skipped the middle point $2$, so it's invalid. For test case #2:The path $1\rightarrow 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\rightarrow 1 \rightarrow 6 \rightarrow 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\n");
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\n");
75             else
76                 printf("invalid\n");
77         }
78     }
79     return 0;
80 }
View Code