思路:一个老式的电话键盘。。。。给出一个拨号的移动路径。。。问这个路径是否唯一。
思路:如果唯一就说明。。。不能平移。。。否则不唯一。。
平移可以上下左右。。所以先写4个常亮数组。。。标记平移后的结果。。。设置不合法位就可以了。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
/* *********************************************** Author :111qqz Created Time :2016年07月18日 星期一 12时56分28秒 File Name :code/2016whust/E.cpp ************************************************ */ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> #include <ctime> #define fst first #define sec second #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define ms(a,x) memset(a,x,sizeof(a)) typedef long long LL; #define pi pair < int ,int > #define MP make_pair using namespace std; const double eps = 1E-8; const int dx4[4]={1,0,0,-1}; const int dy4[4]={0,-1,1,0}; const int inf = 0x3f3f3f3f; const int up[15]={8,-1,-1,-1,1,2,3,4,5,6}; const int down[15]={-1,4,5,6,7,8,9,-1,0,-1}; const int l[15]={-1,-1,1,2,-1,4,5,-1,7,8}; const int r[15]={-1,2,3,-1,5,6,-1,8,9,-1}; int n; string st; bool solve() { bool flag = true; for ( int i = 0 ; i < n ; i++) { int x = st[i]-'0'; // cout<<"x:"<<x<<" x+up[x]"<<x+up[x]<<endl; x = up[x]; if (x==-1) { flag = false; // cout<<"uuuuu"<<endl; break; } } if (flag) return true; flag = true; for ( int i = 0 ; i < n ; i++) { int x = st[i]-'0'; x = down[x]; if (x==-1) { flag = false; // cout<<"ddd"<<endl; break; } } if (flag) return true; flag = true; for ( int i = 0 ; i < n; i++) { int x = st[i]-'0'; x = l[x]; if (x==-1) { flag = false; // cout<<"lll"<<endl; break; } } if (flag) return true; flag = true; for ( int i = 0 ; i < n ; i++) { int x = st[i]-'0'; x = r[x]; if (x==-1) { flag = false; // cout<<"rrr:::"<<endl; break; } } if (flag) return true; return false; } int main() { #ifndef ONLINE_JUDGE freopen("code/in.txt","r",stdin); #endif cin>>n; cin>>st; if (!solve()) { puts("YES"); } else { puts("NO"); } #ifndef ONLINE_JUDGE fclose(stdin); #endif return 0; } |
说点什么
您将是第一位评论人!