#include <iostream>
using namespace std;

bool is_num(char c)
{
    if (c >= '0' && c <= '9')
        return true;
    else
        return false;;
}

bool is_upper(char c)
{
    if (c >= 'A' && c <= 'Z')
        return true;
    else
        return false;;
}

bool is_lower(char c)
{
    if (c >= 'a' && c <= 'z')
        return true;
    else
        return false;;
}

int main() {
    string s;
    int a = 0, b = 0, c = 0, d = 0;
    int count = 0;

    while (getline(cin, s)) {
        a = b = c = d = 0;
        if (s.length() <= 8)
        {
            cout << "NG" << endl;
            continue;
        }
        for (char ch: s)
        {
            if (is_lower(ch))
                a = 1;
            else if (is_upper(ch))
                b = 1;
            else if (is_num(ch))
                c = 1;
            else
                d = 1;
        }
        count = a+b+c+d;
        if (count < 3)
        {
            cout << "NG" << endl;
            continue;
        }
        int flag = 0;
        for (int i = 0; i < s.length()-3; i++)
        {
            string ts = s.substr(i, 3);
            string ts2 = s.substr(i+3);
            if (ts2.find(ts)!=string::npos)
            {
                flag = 1;
                cout << "NG" << endl;
                break;
            }
        }
        if (flag == 1)
            continue;
        cout << "OK" << endl;
    }
}
// 64 位输出请用 printf("%lld")

关键知识点:

ts2.find(ts)!=string::npos。

使用npos表示string.find函数未找到的结果。