CodeForces 689A -Mike and Cellphone

题目链接: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
":"YES
");
}
int main()
{
 while(cin>>n)
 {
  scanf("%s",str);
  out();
 }
 return 0;
}
View Code
 
原文地址:https://www.cnblogs.com/www-cnxcy-com/p/5664734.html