每日总结2022.1.15(密文搜索,compress words)

P8630 [蓝桥杯 2015 国 B] 密文搜索https://www.luogu.com.cn/problem/P8630

思路:只有26个字母,那就用26个桶,两个26个桶,一个记录第一份资料里相邻8个字符出现次数,一个记录密码的8个字符出现次数。二者相同即可。

#include
#include
#include
#include
using namespace std;

int len;
char str[10000000];
int main()
{
	scanf("%s",str);
	int n;
	scanf("%d",&n);
	len=strlen(str);
	int ans=0;
	for(int i=0;i

Compress Wordshttps://www.luogu.com.cn/problem/CF1200E

思路:单词是接在后面的,所以只需从拼接的单词的末尾开始匹配就行,由于匹配长度均不超过二者的长度,假设二者长度较小的为L,那么只需要从后面L个字符开始匹配。

#include
#include
#include

int nex[1000005];
int lenstr;//设置为全局变量,避免在kmp或者getnext函数中计算
int lensub;
void getnext(int *nex,char *sub)
{
	nex[0]=-1;
	nex[1]=0;
	int j=2;
	int k=0;
	while(j<=lensub)
	{
		if(k==-1||sub[j-1]==sub[k])
		{
			nex[j]=k+1;
			j++;
			k++;
		}
		else
		{
			k=nex[k];
		}
	}
}
int kmp(char *str,char *sub)
{
	int i=0;
	int j=0;
	if(lenstr>lensub) i=lenstr-lensub;
	while(i

今天测试没想到会拿第一,开心

你可能感兴趣的:(蓝桥杯,算法,c++)