CodeForces 689A

题意:有十个键的手机键盘,按下一个长度为n的序列,问按照这种序列的手势能否按出其它的序列,如果能输出NO,否则输出YES。

题解:我们可以吧这种序列的手势按上下左右平移就行,如果能平移,则能按出其它的序列,上下左右的方向可以用数组表示,div[4]={-3,3,-1,1}

特殊元素特殊处理:

①0只能上移

②8可以下移

③1,4,7不能左移

④3,6,9不能右移

具体见代码

#include <iostream>

using namespace std;

int div[4]={-1,1,-3,3};

int main()
{
    int n;
    string a;
    cin>>n;
    cin>>a;
    bool ok=true;

    for(int i=0;i<4;i++)
    {
        int j;
        for(j=0;j<n;j++)
        {
            if(a[j]=='0' && i!=2) break;
            if(a[j]=='0' && i==2) continue;
            if(a[j]=='8' && i==3) continue;
            if( (a[j]=='1' || a[j]=='4' || a[j]=='7') && i==0 ) break;
            if( (a[j]=='3' || a[j]=='6' || a[j]=='9') && i==1 ) break;
            int temp=a[j]-'0'+div[i];
            if(temp<=0 || temp>=10) break;
        }
        if(j==n) ok=false;
    }
    if(ok) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/mgxj/p/5661623.html