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
原文地址:https://www.cnblogs.com/Aragaki/p/8688939.html