蒟蒻不明白这段代码为什么会TLE
  • 板块灌水区
  • 楼主wa_wa_wa_wa
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/28 19:41
  • 上次更新2024/7/28 20:56:54
查看原帖
蒟蒻不明白这段代码为什么会TLE
1199324
wa_wa_wa_wa楼主2024/7/28 19:41
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mk make_pair
#define pb push_back
inline ll read(){
	ll x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
char ss[100] = {' ','W','I','N','G'};
string name;
int W,I,N,G,f[305][305][100];
map<string,bool>www,iii,nnn,ggg;
string s;
int main(){
	W = read(),I = read(), N = read(),G = read();
	for(int i = 1; i <= W; i++){
		cin >> s;
		www[s] = 1;
	}
	for(int i = 1; i <= I; i++){
		cin >> s;
		iii[s] = 1;
	}
	for(int i = 1; i <= N; i++){
		cin >> s;
		nnn[s] = 1;
	}
	for(int i = 1; i <= G; i++){
		cin >> s;
		ggg[s] = 1;
	}
	cin >> name;
	int flag;
	for(int i = 0; i < name.size(); i++){
		if(name[i] == 'W') flag = 1;
		if(name[i] == 'I') flag = 2;
		if(name[i] == 'N') flag = 3;
		if(name[i] == 'G') flag = 4;
		f[i+1][i+1][flag] = 1;
	}
	int lenn = name.size();
	for(int len = 2; len <= lenn; len++){
		for(int l = 1; l+len-1 <= lenn; l++){
			int r = l+len-1;
			for(int k = l; k < r; k++){
				for(int x1 = 1; x1 <= 4; x1++){
					for(int x2 = 1; x2 <= 4; x2++){
						if((!f[l][k][x1]) || (!f[k+1][r][x2])) continue;
						string s;
						s.pb(ss[x1]);
						s.pb(ss[x2]);
						if(www[s]) f[l][r][1] = 1;
						if(iii[s]) f[l][r][2] = 1;
						if(nnn[s]) f[l][r][3] = 1;
						if(ggg[s]) f[l][r][4] = 1;
					}
				}
			}
		}
	}
	flag = 0;
	if(f[1][lenn][1]) flag = 1,cout << "W";
	if(f[1][lenn][2]) flag = 1,cout << "I";
	if(f[1][lenn][3]) flag = 1,cout << "N";
	if(f[1][lenn][4]) flag = 1,cout << "G";
	if(!flag) cout << "The name is wrong!";
	return 0;
}
 

原题 怎么算都是O(L3O(L^3)不知到为什么会TLE最后一个点 记录

2024/7/28 19:41
加载中...