哈希查重,只判断找长度为3的重复字串即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    while(getline(cin,s))
    {
        bool st[10]={0};
        if(s.size()>8)st[5]=true;
        else
        {
            cout<<"NG"<<endl;
            continue;
        }
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0'&&s[i]<='9')st[1]=true;
            else if(s[i]>='a'&&s[i]<='z')st[2]=true;
            else if(s[i]>='A'&&s[i]<='Z')st[3]=true;
            else if(s[i]!='\n'&&s[i]!=' ')st[4]=true;
        }
        int len=3;
        unordered_map<string,int>mp;
        for(int l=0;l+len-1<s.size();l++)
        {
            if(!mp[s.substr(l,len)])mp[s.substr(l,len)]++;
            else 
            {
                st[6]=true;
                break;
            }
        }
        int ok=0;
        for(int i=1;i<=4;i++)
            if(st[i])
                ok++;
        if(ok>=3&&!st[6])cout<<"OK"<<endl;
        else puts("NG");
    }
}