hack数据过不了的特殊判断一下
查看原帖
hack数据过不了的特殊判断一下
817442
Sakuya_maid楼主2023/3/23 20:13

判断一下当前的cnt是否是0,是0的话记得输出“WRONG”,这是与仅仅前缀相同不一样的地方

如下面部分代码

插入部分:

void insert()
{
	int p = 0;
	
	for(int i = 0; s[i]; ++ i)
	{
		int u = getnum(s[i]);
		
		if(!son[p][u])	son[p][u] = ++idx;
		p = son[p][u];
	}
	a[p].cnt++;
}

判断查询部分:

void query()
{
	int p = 0;
	
	for(int i = 0; s[i]; ++ i)
	{
		int u = getnum(s[i]);
		
		if(!son[p][u]){
			cout << "WRONG" << '\n';
			return;
		}else{
			p = son[p][u];
		}
	}
	
	if(a[p].cnt == 0){
		cout << "WRONG" << '\n';
		return ;
	}
	
	if(!a[p].flag){
		a[p].flag = 1;
		cout << "OK" << '\n'; 
		return;
	}else if(a[p].flag){
		cout << "REPEAT" << '\n';
		return;
	}
}

这个判断

if(a[p].cnt == 0){
		cout << "WRONG" << '\n';
		return ;
	}

很重要

去掉的话就是判断前缀了

希望能帮到你

2023/3/23 20:13
加载中...