hdu 5641 BestCoder Round #75
来源:互联网 发布:佳能调焦软件 编辑:程序博客网 时间:2024/05/05 22:19
King's Phone
Accepts: 310
Submissions: 2980
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
阅兵式上,国王见到了很多新奇东西,包括一台安卓手机。他很快对手机的图形解锁产生了兴趣。解锁界面是一个 3×3 的正方形点阵,第一行的三个点标号 1,2,3,第二行的三个点标号 4,5,6,第三行的三个点标号 7,8,9。密码本身是一段序列,表示经过点的先后顺序,但遵循如下规则:1. 密码至少经过四个点。2. 不能重复经过同一个点。3. 路径上的中间点不能跳过,除非已经被经过(3427 是合法的,但 3724 不合法)。他想设置的密码的长度为正整数 k(1≤k≤9),密码序列为 s1s2...sk(0≤si<INT_MAX),他想知道这个密码序列是否合法,这个问题交给了你。
输入描述
第一行一个整数表示测试组数:T(0<T≤100000) 。每组数据占一行,每行第一个数 k,设置密码的长度;接着 k 个正整数,之间用空格隔开,表示密码序列 s1s2...sk。
输出描述
共 T 行。对每组数据,若合法输出 `valid`,否则输出 `invalid`。
输入样例
34 1 3 6 24 6 2 1 34 8 1 6 7
输出样例
invalidvalidvalid
Hint
对于第一组数据,1 到 3 跳过了路径上的点 2,所以不合法。对于第二组数据,1 到 3 时点 2 已经被经过了,所以合法。对于第三组数据,8→1→6→7 路径均没有中间点,所以合法。
/*hdu 5641 BestCoder Round #75给你3*3的1 2 34 5 67 8 9就像手机滑动解锁,给你s1s2s3....sn问给的密码是否合适1.至少有4位 2.中途不能有没走过的 3.走过之后不能走第二次4.由于0≤s[i]<INT_MAX,所以要判断s[i]是否在1~9像1->3就要先判断中间的2走过没,1->5 or 1->则都是合法的所以每次对两个数进行一次判断即可*/#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>#include <stack>#include <map>using namespace std;typedef long long ll;typedef long double ld;#define lson (i<<1)#define rson ((i<<1)|1)const int maxn = 20;int vis[maxn];int a[maxn];bool judge(int a,int b){ if(a > b) swap(a,b); if(a == 1 && b == 9) return vis[5]; else if(a == 1 && b == 3) return vis[2]; else if(a == 1 && b == 7) return vis[4]; else if(a == 3 && b == 9) return vis[6]; else if(a == 2 && b == 8) return vis[5]; else if(a == 3 && b == 7) return vis[5]; else if(a == 4 && b == 6) return vis[5]; else if(a == 7 && b == 9) return vis[8]; else return 1;}int main(){ int T,m,n; scanf("%d",&T); while(T--) { int flag = 0; scanf("%d",&n); memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; i++) { scanf("%d",&a[i]); if(a[i] > 9 || a[i] < 1) flag = 1; } if(flag || n < 4) { printf("invalid\n"); continue; } vis[a[1]] = 1; for(int i = 2;i <= n;i++) { if(!judge(a[i],a[i-1]) || vis[a[i]]) flag =1; vis[a[i]] = 1; } if(flag) printf("invalid\n"); else printf("valid\n"); } return 0;}
2 0
- hdu 5641 BestCoder Round #75
- hdu 5643 BestCoder Round #75
- 【hdu】 5640 , 5641 , 5642 , 5643 (BestCoder Round #75)
- HDU BestCoder Round #48 1001
- BestCoder Round #83(HDU 5680)
- HDU 5643 bestcoder Round #75 king's game [威瑟夫问题]
- 记 BestCoder Round #75
- BestCoder Round #75
- BestCoder Round #75 总结
- BestCoder Round #75
- BestCoder Round #75
- BestCoder Round #48 ($) (hdu 5284、hdu 5285)
- [BestCoder Round #3] hdu 4908 BestCoder Sequence (计数)
- hdu 4908 BestCoder Sequence && BestCoder Round #3 1002
- HDU 4908 BestCoder Sequence——BestCoder Round #3
- HDU BestCoder Round #1 1002 项目管理
- BestCoder round#3 1001 && Hdu 4907
- HDU 4907 Task schedule(BestCoder Round #3 )
- How to Advertise Android as a Bluetooth LE Peripheral
- 共用体练习
- HDU3572 Task Schedule(最大流)
- Ubuntu15.10操作mysql5.6数据库
- 校验经过base64编码的字符串是否是图片文件
- hdu 5641 BestCoder Round #75
- 线程间同步,条件变量
- 记一次Android ListView没有成功显示出来的原因
- 老--质价比
- .bash_profile和.bashrc的区别(如何设置生效)
- javaScript
- UINavigationController, UITabBarController
- jdbc简单操作数据库实例
- Hadoop搭建