A
B
C
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }
D
A,B轮流走 dp[i][j][k]表示先走的人在i 另一个在j 之前人走的为k时是必胜还是必败 必胜为1 必败为0
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }