标签:
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=412142
题目大意: 给定一个0-9数字键盘,随后输入一个操作序列,即按键手势,问该操作序列在键盘上形成的手势是否是唯一的,是YES,否NO。手势可往上下左右平移。
解题思路:
由于数字很少,可以把数字的位置表示成坐标,按这个手势的顺序匹配其它的数字(即把这些数字统一上或下或左或右平移),看匹配后的数字还在不在这个键盘上;
#include <cstdio> #include <iostream> using namespace std; int n,coordinate[10][2]={2,1,1,4,2,4,3,4,1,3,2,3,3,3,1,2,2,2,3,2}; int dir[4][2]={-1,0,1,0,0,-1,0,1}; char str[10]; int find(int d) { for(int i=0;i<n;i++) { int x=str[i]-‘0‘; if(x==0&&(d==0||d==1||d==2)) return 0; if(coordinate[x][0]+dir[d][0]<1||coordinate[x][0]+dir[d][0]>3||(x!=8&&coordinate[x][1]+dir[d][1]<2)||coordinate[x][1]+dir[d][1]>4) return 0; } return 1; } void out() { int flag=0; for(int i=0;i<4;i++) if(find(i)) {flag=1;if(flag) break;} printf(flag?"NO\n":"YES\n"); } int main() { while(cin>>n) { scanf("%s",str); out(); } return 0; }
CodeForces 689A -Mike and Cellphone
标签:
原文地址:http://www.cnblogs.com/www-cnxcy-com/p/5664734.html