• Codeforces 918 括号匹配 SGdp[i][j][k]


    A

    B

    C

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 1e9
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int  maxn = 100005;
    const int turn[4][2] = {{1, 0}, { -1, 0}, {0, 1}, {0, -1}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int main()
    {
            int ques = 0;
            int l = 0;
            int anser = 0;
            string a;
            cin >> a;
            int len = a.size();
            for (int i = 0; i < len - 1; i++)
            {
                    l = 0;
                    ques = 0;
                    for (int j = i; j < len; j++)
                    {
                            int flag = 1;
                            if (a[j] == ')')
                            {
                                    l--;
                            }
                            else if (a[j] == '(')
                            {
                                    l++;
                            }
                            else
                            {
                                    ques++;
                                    l--;
                            }
                            if (l < 0)
                            {
                                    if (ques)
                                    {
                                            while (l < 0 && ques)
                                            {
                                                    l += 2;
                                                    ques--;
                                            }
                                    }
                                    else
                                    {
                                            l = 0;
                                            break;
                                    }
                            }
                            if (l == 0)
                            {
                                    //cout << i << " " << j << endl;
                                    anser++;
                            }
                    }
            }
            cout << anser << endl;
            return 0;
    }
    View Code

    D

    A,B轮流走 dp[i][j][k]表示先走的人在i 另一个在j 之前人走的为k时是必胜还是必败 必胜为1 必败为0

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 1e9
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{1, 0}, { -1, 0}, {0, 1}, {0, -1}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    vector<int> f[105];
    int dp[105][105][105];
    int gra[105][105];
    int dfs(int x, int y, int now)
    {
            if (dp[x][y][now] != -1)
            {
                    return dp[x][y][now];
            }
            int len = f[x].size();
            for (int i = 0; i < len; i++)
            {
                    int to = f[x][i];
                    if (gra[x][to] >= now && dfs(y, to, gra[x][to]) == 0)
                    {
                            dp[x][y][now] = 1;
                            return 1;
                    }
            }
            return 0;
    }
    int main()
    {
            mem(dp, -1);
            string a;
            int n, m;
            cin >> n >> m;
            for (int i = 1; i <= m; i++)
            {
                    char ch;
                    int from, to;
                    scanf("%d %d", &from, &to);
                    cin >> a;
                    f[from].pb(to);
                    gra[from][to] = a[0] - 'a';
            }
            for (int i = 1; i <= n; i++)
            {
                    for (int j = 1; j <= n; j++)
                    {
                            if (dfs(i, j, 0))
                            {
                                    cout << "A";
                            }
                            else
                            {
                                    cout << "B";
                            }
                    }
                    cout << endl;
            }
            return 0;
    }
    View Code
  • 相关阅读:
    对象 函数
    流程控制语句 label 从键盘输入 计时器 []中括号的使用
    类型转换 运算符 流程控制语句
    JS的编写的位置 输出语句 注释 字面量和变量 数据类型
    AutoCad 二次开发 .net 之创建Table
    AutoCad 二次开发 .net 之相同块的自动编号
    Java 多线程练习
    C# Winform 自定义控件——竖着的Navbar
    C# Winfrom 自定义控件——带图片的TextBox
    Task CancellationTokenSource和Task.WhenAll的应用
  • 原文地址:https://www.cnblogs.com/Aragaki/p/8688939.html
Copyright © 2020-2023  润新知