#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
while (cin>>str) {
if (str.length()<8)
{
cout<<"NG\n";
str.clear();
continue;
}
int flag = 0, count = 0;
for (char cc : str) {
if (cc>='0' && cc<='9') {
if (!(flag&1)) {
flag |= 1;
count++;
}
}
else if (cc>='A' && cc<='Z') {
if (!(flag&2)) {
flag |= 2;
count++;
}
}
else if (cc>='a' && cc<='z') {
if (!(flag&4)) {
flag |= 4;
count++;
}
}
else {
if (!(flag&8)) {
flag |= 8;
count++;
}
}
if (count>2) {
break;
}
}
if (count<3) {
cout<<"NG\n";
str.clear();
continue;
}
bool rs = true;
for (int i=0; i<=(str.length()-6); i++) {
string tmp(str.substr(i, 3));
auto index = str.find(tmp, i+3);
if (index != string::npos) {
rs = false;
break;
}
}
if (rs) {
cout<<"OK\n";
}
else {
cout<<"NG\n";
}
str.clear();
}
}
// 64 位输出请用 printf("%lld")
判定至少包含三种字符:用整型变量flag四个位保存四种类型字符存在的情况,bit为1则表示含有,反正则没有。
判定重复子串:子串最少长度是3,只要长度为3的子串不存在重复,长度大于3的子串必不会重复。

京公网安备 11010502036488号