80分玄关wrong2,4求助
查看原帖
80分玄关wrong2,4求助
1295259
1122123aa楼主2024/10/27 12:52
#include<bits/stdc++.h>

using namespace std;

char str[210];
int a,b,c,d,n = 0,m[210];
int dp[210][210][4];
int mp[4][4][4];

int transf(char x){
	if(x == 'W') return 0;
	if(x == 'I') return 1;
	if(x == 'N') return 2;
	if(x == 'G') return 3;
}

char transb(int x){
	if(x == 0) return 'W';
	if(x == 1) return 'I';
	if(x == 2) return 'N';
	if(x == 3) return 'G';
}

int main(){
	char x,y;
	cin >> a >> b >> c >> d;
	for(int i = 1;i <= a;i++){
		cin >> x >> y;
		mp[transf(x)][transf(x)][0] = 1;
	}
	for(int i = 1;i <= b;i++){
		cin >> x >> y;
		mp[transf(x)][transf(y)][1] = 1;
	}
	for(int i = 1;i <= c;i++){
		cin >> x >> y;
		mp[transf(x)][transf(y)][2] = 1;
	}
	for(int i = 1;i <= d;i++){
		cin >> x >> y;
		mp[transf(x)][transf(y)][3] = 1;
	}

	cin >> str + 1;
	for(int i = 1;str[i] != 0;i++){
		m[i] = transf(str[i]);
		dp[i][i][m[i]] = 1;
		n++;
	}
	
	for(int i = 2;i <= n;i++){
		for(int j = 1;j <= n-i+1;j++){
			int r = j + i - 1;
			for(int k = j;k < r;k++){
				for(int p = 0;p < 4;p++){
					for(int q = 0;q < 4;q++){
						for(int s = 0;s < 4;s++){
							if(mp[q][s][p]){
								if(dp[j][k][q] && dp[k+1][r][s]) dp[j][r][p] = 1;
							}
						}
					}
				}
			}
		}
	}	
	
	int flag = 1;
	for(int i = 0;i < 4;i++){
		if(dp[1][n][i]){
			cout << transb(i);
			flag = 0;
		}
	}
	
	if(flag) cout << "The name is wrong!";
	
	return 0;
}
2024/10/27 12:52
加载中...