当日总结
链接:https://ac.nowcoder.com/acm/contest/19851/1002
来源:牛客网
安卓图案解锁的密码有这样的一些特点:
1.每个数字最多只会被使用一次。
2.如果想直接连接两个数字,但是线段中会经过另一个数字,当且仅有那个数字已经在之前就被使用过了,才会合法。(比如你想从1直接连接到9,那么要么是1->5->9,要么是5在之前已经被使用过了,然后才能直接从1->9)
输入描述:
多组输入
每组输入占一行,包含一串数字(1~9),长度不超过30
输出描述:
输出这个安卓图案解锁是否合法,如果合法输出"YES",反之输出"NO" (请参照样例输出,不要输出引号)
include
include
include
using namespace std;
bool valid(int a, int b, vector
if (is[b] == 0) {
int mid = a + b;
//is[b] = 1;
if (a % 2 == 0 && b % 2 == 0 && a + b != 10) {
return 1;
}
else if (a != 5 && b != 5 && mid % 2 == 0) {
if (is[mid / 2] == 1) {
return 1;
}
else return 0;
}
else return 1;
}
else return 0;
}
bool check(string s){
if (s.size() > 9) return 0;
s = '0' + s;
vector
is[s[1] - '0'] = 1;
for (int i = 1; i < s.size() - 1; i++) {
if (valid(s[i] - '0', s[i + 1] - '0', is)) {
is[s[i + 1] - '0'] = 1;
}
else return 0;
}
return 1;
}
int main() {
string s;
while (cin >> s) {
if (check(s)) {
cout << "YES" << endl;
}
else cout << "NO" << endl;
}
}

浙公网安备 33010602011771号