期望50分特殊性质洛谷计蒜客全爆0求助
查看原帖
期望50分特殊性质洛谷计蒜客全爆0求助
228770
ZBAA_MKC楼主2022/10/29 17:39

Rt /kel

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;

int main()
{
	freopen("expr.in", "r", stdin);
	freopen("expr.out", "w", stdout);
    string s;
    cin >> s;
    if (s.size() == 1)
    {
        cout << 0;
    }
    else if (s.size() == 3)
    {
        if (s[1] == '|')
        {
            if (s[0] == '1')
            {
                cout << 1;
            }
            else
            {
                cout << 0;
            }
        }
        else
        {
            if (s[0] == '0')
            {
                cout << 1;
            }
            else
            {
                cout << 0;
            }
        }
    }
    else if (s.size() == 5)
    {
        char pos1 = '2', pos2 = '2';
        for (int i = 1; i < 5; i++)
        {
            if (s[i] == '|' || s[i] == '&')
            {
                pos2 = s[i];
            }
            if (s[i] == '1' || s[i] == '0')
            {
                if (pos1 == '2')
                {
                    pos1 = s[i];
                }
                else
                {
                    if (pos2 == '2')
                    {
                        cout << 0;
                    }
                    else if (pos2 == '|')
                    {
                        if (pos1 == '1')
                        {
                            cout << 1;
                        }
                        else
                        {
                            cout << 0;
                        }
                    }
                    else
                    {
                        if (pos1 == '0')
                        {
                            cout << 1;
                        }
                        else
                        {
                            cout << 0;
                        }
                    }
                }
                return 0;
            }
        }
        return 0;
    }
    else
    {
        // 0 -> |
        // 1 -> &
        bool f;
        int len = s.size();
        int pos = -1;
        for (int i = 0; i < len; i++)
        {
            if (pos == -1)
            {
                if (s[i] == '1' || s[i] == '0')
                {
                    pos = i;
                }
            }
            if (s[i] == '|')
            {
                f = 0;
                break;
            }
            else if (s[i] == '&')
            {
                f = 1;
                break;
            }
        }
        bool cur = s[pos] - '0';
        int ans = 0;
        if (f == 0)
        {
            for (int i = pos + 1; i < len; i++)
            {
                if (s[i] == '0' || s[i] == '1')
                {
                    if (cur == 1)
                    {
                        ans++;
                    }
                    cur |= (s[i] - '0');
                }
            }
        }
        else
        {
            for (int i = pos + 1; i < len; i++)
            {
                if (s[i] == '0' || s[i] == '1')
                {
                    if (cur == 0)
                    {
                        ans++;
                    }
                    cur &= (s[i] - '0');
                }
            }
        }
        cout << ans;
    }
    return 0;
}
2022/10/29 17:39
加载中...