70pts求助
查看原帖
70pts求助
1305692
xiangixuan楼主2025/1/1 15:22

三个点本应有解,但却输出无解

#include<bits/stdc++.h>
#define int long long
using namespace std;
int tot[5], n;
bool f[301][301][5];
short s[5][25][3], S[301];
int change(char c) {
	if (c=='W') return 1;
	else if (c=='I') return 2;
	else if (c=='N') return 3;
	else return 4;
}
void read(int n) {
	string tmp;
	for (int i=1; i<=tot[n]; ++i) {
    	cin >> tmp;
    	s[n][i][1]=change(tmp[0]);
		s[n][i][2]=change(tmp[1]);
	}
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin >> tot[1] >> tot[2] >> tot[3] >> tot[4];
    read(1), read(2), read(3), read(4);
	string tmp; cin >> tmp; n=tmp.size();
	for (int i=1; i<=n; ++i) S[i]=change(tmp[i-1]);
    for (int len=2; len<=n; ++len)
        for (int l=1; l+len-1<=n; ++l) {
        	int r=l+len-1;
        	for (int k=1; k<=4; ++k)
        		for (int m=l; m<r; ++m)
            		for (int i=1; i<=tot[k]; ++i) {
            			if (f[l][m][s[k][i][1]] && f[m+1][r][s[k][i][2]])
            				f[l][r][k]=1;
            			if (len==2 && S[l]==s[k][i][1] && S[r]==s[k][i][2])
            				f[l][r][k]=1;
					}
		}
	bool cnt=0;
	if (f[1][n][1]) cout << 'W', cnt=1;
	if (f[1][n][2]) cout << 'I', cnt=1;
	if (f[1][n][3]) cout << 'N', cnt=1;
	if (f[1][n][4]) cout << 'G', cnt=1;
	if (!cnt) cout << "The name is wrong!";
	cout << '\n';
    return 0;
}
2025/1/1 15:22
加载中...