90pts,WA on #1求助
查看原帖
90pts,WA on #1求助
678858
ShiRoZeTsuHL卜奎BBQ!楼主2023/4/15 11:49

可能是某些我没考虑到的情况罢()

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 205;

int W, I, N, G, a[maxn];
vector<int> v[100];
char to[5] = {'0', 'W', 'I', 'N', 'G'};
string s;
bool dp[maxn][maxn][5];;

int change(char x) {
	if(x == 'W') return 1;
	else if(x == 'I') return 2;
	else if(x == 'N') return 3;
	else if(x == 'G') return 4;
}

void inputc(int d, char c) {
	for(int i = 1; i <= d; i++) {
		string x;
		cin >> x;
		int p = change(x[0]), q = change(x[1]);
		v[p*10 + q].push_back(change(c));
	}
}

int main() {
	cin >> W >> I >> N >> G;
	inputc(W, 'W');
	inputc(I, 'I');
	inputc(N, 'N');
	inputc(G, 'G');
	
	cin >> s;
	int n = s.size();
	for(int i = 0; i < n; i++)
		a[i+1] = change(s[i]);
	
	for(int i = 1; i <= n; i++)
		dp[i][i][a[i]] = true;
	for(int i = 1; i < n; i++) {
		int p = a[i]*10 + a[i+1];
		for(int j = 0; j < v[p].size(); j++)
			dp[i][i+1][v[p][j]] = true;
	}
	
	for(int d = 3; d <= n; d++)
	for(int i = 1; i+d-1 <= n; i++) {
		int j = i+d-1;
		for(int k = i; k < j; k++)
		for(int p = 1; p <= 4; p++)
		for(int q = 1; q <= 4; q++) {
			if(!dp[i][k][p] || !dp[k+1][j][q]) continue;
			int d = p*10 + q;
			for(int f = 0; f < v[d].size(); f++)
				dp[i][j][v[d][f]] = true;
		}
	}
	
	for(int i = 1; i <= 4; i++)
		if(dp[1][n][i]) cout << to[i];
	return 0;
}
2023/4/15 11:49
加载中...