梦熊J组 T2神笔模拟

· · 个人记录

sb不会打模拟了,我是傻逼

#include<bits/stdc++.h>
using namespace std;

void exit1()
{
    cout << "Yes";
    exit(0);
}

void exit2()
{
    cout << "No";
    exit(0);
}

int ck[1005];
int n;
string s;

int L(int pos)
{
    char now = s[pos];
    if (ck[now] == 4) return L(pos - 1);
    return ck[now];
}

int R(int pos)
{
    if (pos == n) exit1();
    char now = s[pos];
    if (ck[now] == 4) return R(pos + 1);
    return ck[now];
}

signed main()
{
    ck['a'] = 1, ck['1'] = 1, ck['$'] = 1;
    ck['@'] = 2;
    ck[','] = 3;
    ck['_'] = 4;

    cin >> s;
    n = s.size();
    for (int i = 1; i < n; i++)
        if ((ck[s[i]] == 1 && ck[s[i - 1]] == 2) || (ck[s[i]] == 2 && ck[s[i - 1]] == 1))
            exit2();

    bool flag = 0;
    for (int i = 0; i < n; i++)
    {
        if (ck[s[i]] == 4 && flag)
        {
            int l = L(i - 1);
            int r = R(i + 1);
            if ((l == 1 && r == 3) || (l == 3 && r == 1)) exit2();
        }
        else flag = 1;
    }
    exit1();
}