社区讨论

MLE求助

P1026[NOIP 2001 提高组] 统计单词个数参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lyjtqsai
此快照首次捕获于
2024/07/13 15:47
2 年前
此快照最后确认于
2024/07/13 16:52
2 年前
查看原帖
rt
CPP
#include<bits/stdc++.h>

using namespace std;

int n, k, s;
string a[101], b[11];
int o, c;
bool f[201], g[201];

int cha(int x){
	for(int i = 0; i < 201; i++) g[i] = 0;
	int z, ans = 0;
	for(int i = 0; i < s; i++){
		bool t;
		z = 0;
		while((z = a[x].find(b[i], z)) != string::npos){
			t = 1;
			if (g[z] == 1) t = 0;
			for(int j = z; j < z + b[i].size() - 1; j++){
				if (f[j] == 1){
					t = 0;
				}
			}
			if (t == 1){
//				cout << ans << ':' << b[i] << ' ' << z + 1 << endl;
				g[z] = 1;
				ans++;
			}
			z += b[i].length();
		}
	}
	/*
	for(int i = 0; i < s; i++){
		if ()
		z = a[x].find(b[i]);
		
	}
	*/
	return ans;
}

int dfs(int u, int l, int x){
	if (l == k - 1){
		c = max(c, cha(x));
		return 0;
	}
	f[u] = 1;
	int z;
	for(int i = 0; i < s; i++){
		z = 0;
		while((z = a[x].find(b[i], z)) != string::npos){
			dfs(z, l + 1, x);
			z += b[i].length();
		}
	}
	f[u] = 0;
//	dfs(u, l + 1, x);
}

int main(){
	cin >> n >> k;
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	cin >> s;
	for(int i = 0; i < s; i++){
		cin >> b[i];
	}
	for(int i = 0; i < n; i++){
		c = 0;
		for(int j = 0; j < 201; j++){
			f[j] = 0;
		}
		dfs(0, 0, i);
		cout << c << endl;
	}
}
/*
1 3
aabbcc
2
aab
a
*/

回复

0 条回复,欢迎继续交流。

正在加载回复...