HDU 5641
Posted 半根毛线code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 \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.
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 $T(0 < T \le 100000)$, the number of the testcases.
For each test case, there are only one line. the first first number $k$,represent the length of the password, then $k$ numbers, separated by a space, representing the password sequence $s_1,s_2...s_k$.
For each test case, there are only one line. the first first number $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 }
以上是关于HDU 5641的主要内容,如果未能解决你的问题,请参考以下文章
[题解] Luogu P5641 CSGRound2开拓者的卓识
HDU4057 Rescue the Rabbit(AC自动机+状压DP)
HDU3247 Resource Archiver(AC自动机+BFS+DP)