首页 > 其他分享 >CF235C Cyclical Quest

CF235C Cyclical Quest

时间:2024-02-04 21:56:54浏览次数:31  
标签:Cyclical SAM int len fa Quest CF235C np now

更好的阅读体验

CF235C Cyclical Quest

SAM 做法:

对于主串建 SAM,然后 parent tree 上 DP 出 \(f_i\) 表示节点 \(i\) 后缀等价类的出现次数。询问先用 KMP 求最小循环元 \(m\),然后接下来需要把 \([1,n],[2,n]\dots[m-1,n+m-1]\) 扔进 SAM 里跑。

暴力显然过不去,但是跑完一次可以删去最开始的字符然后继续跑。删去开头字符等价于在 parent tree 上向上跳,即当 \(len_{fa_now}\geq n\) 时 \(now\rightarrow fa_{now}\)。同时跑不动的时候也向上跳,并把当前的 \(len\) 设为 \(len_{fa}\)。

总复杂度线性。

后缀数组做法:

离线,把主串和询问串加循环元拼在一起,对于每个不是主串的后缀前后二分找到满足 LCP 长度为 \(n\) 的区间然后前缀和相见即可。

好像比 SAM 简单一些,但是复杂度带一只 \(\log\)。

提供 SAM 代码:

	int n,TT,m,now,r,ans,nex[1000010],f[2000010];
	char x[2000010],s[1000010];
	vector<int> T[2000010];
	namespace SAM
	{
		int last=1,cnt=1;
		struct{int ch[26],fa,len;}t[2000010];
		inline int add(int x)
		{
			int np=++cnt,p=last,q,nq;t[last=np].len=t[p].len+1,f[np]=1;
			while(p&&!t[p].ch[x])t[p].ch[x]=np,p=t[p].fa;
			if(!p)return t[np].fa=1,np;
			if(t[q=t[p].ch[x]].len==t[p].len+1)return t[np].fa=q,np;
			t[nq=++cnt]=t[q],t[nq].len=t[p].len+1,t[np].fa=t[q].fa=nq;
			while(p&&t[p].ch[x]==q)t[p].ch[x]=nq,p=t[p].fa;
			return np;
		}
	}
	using namespace SAM;
	void dfs(int x){for(auto to:T[x])dfs(to),f[x]+=f[to];}
	inline void mian()
	{
		read(s,TT),n=strlen(s+1);
		for(int i=1;i<=n;++i)add(s[i]-'a');
		for(int i=2;i<=cnt;++i)T[t[i].fa].eb(i);
		dfs(1);
		while(TT--)
		{
			read(x),n=strlen(x+1);
			for(int i=1;i<=n;++i)x[n+i]=x[i];
			for(int j=0,i=2;i<=n;nex[i++]=j)
			{
				while(j&&x[j+1]!=x[i])j=nex[j];
				if(x[j+1]==x[i])++j;
			}
			if(n%(n-nex[n])==0)m=n-nex[n];else m=n;
			now=1,r=0,ans=0;
			for(int i=n,r=0,len=0;now&&i<n+m;++i)
			{
				while(r<i)
				{
					++r;
					while(now&&!t[now].ch[x[r]-'a'])now=t[now].fa,len=t[now].len;
					now=t[now].ch[x[r]-'a'],++len;
				}
				while(t[t[now].fa].len>=n)now=t[now].fa;
				if(len>=n)ans+=f[now];
			}
			write(ans,'\n');
		}
	}

标签:Cyclical,SAM,int,len,fa,Quest,CF235C,np,now
From: https://www.cnblogs.com/WrongAnswer90-home/p/18007071

相关文章

  • 文件上传错误:Processing of multipart/form-data request failed. Stream ended unexp
    问题描述Processingofmultipart/form-datarequestfailed.Streamendedunexpectedly不通过网关,直接在本地debug是可以上传成功的,线上环境通过网关上传则会导致此错误,可能是网关修改了请求内容。解决方式前端将文件转换为base64字符串,服务端接收到再转换为字节数组......
  • requests库请求出现 SSLCertVerificationError
    python使用requests库发送https请求报错:SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]。requests库简单介绍:Requests是一常用的http请求库,它使用python语言编写,可以很方便地发送http请求及处理响应结果。Requests允许你发送纯天然,植物饲养的HTTP/1.1请求,无需......
  • CSharp: QuestPDF 2023.12.4 in doenet 8.0
     /*ide:vs202217.5.net8.0QuestPDF23.12.4from:https://github.com/QuestPDF/QuestPDF/discussions/560*/namespaceConsoleAppFontPdfDemo{usingQuestPDF;usingQuestPDF.Fluent;usingQuestPDF.Infrastructure;usingQuest......
  • 学习AJAX时出现has been blocked by CORS policy: Cross origin requests are only su
    练习js时用到ajax,console报错:AccesstoXMLHttpRequestat‘file:///Users/XXX/Downloads/nav/nav.json’fromorigin‘null’hasbeenblockedbyCORSpolicy:Crossoriginrequestsareonlysupportedforprotocolschemes:http,data,chrome,chrome-extension,chro......
  • Python requests.get所有参数顺序、Python requests.post所有参数顺序
    request.get所有参数顺序:url(必选)、params、allow_redirects、auth、cert、cookies、headers、proxies、stream、timeout、verify -------------------------------------------------------------------------------------------------------------------------------------......
  • oracle 报错ORA-12514: TNS:listener does not currently know of service requested
    oracle报错ORA-12514:TNS:listenerdoesnotcurrentlyknowofservicerequestedinconnec 在使用navicat上连接oracle正确用户名和密码,oracle常用服务也启动的情况下依然无法建立连接。但是sqlPus上输入用户名和密码可以连接通过,百思不得其解(菜鸟本质好奇)。这种......
  • npm证书过期:npm ERR! request to https://registry.npm.taobao.org/element-ui failed
    场景:使用淘宝源安装element-ui时npm证书过期报错信息如下:npmERR!codeCERT_HAS_EXPIREDnpmERR!errnoCERT_HAS_EXPIREDnpmERR!requesttohttps://registry.npm.taobao.org/element-uifailed,reason:certificatehasexpirednpmERR!Acompletelogofthisrun......
  • requests响应文本乱码解决办法
    1.请求百度首页,响应文本页面标题乱码乱码原因:requests获取响应文本之前,会有一个解码的过程,解码就有编码格式,编码格式在响应头content-type里获取,未获取到或者未获取成功,会随便使用默认的编码格式,可能会造成乱码2.查看原本的编码格式图片上运行结果显示原本的编码格式未获取......
  • 【MYSQL】4、mysql中的Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests
    原文链接:https://blog.csdn.net/qq_35462323/article/details/1318115931、Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests的含义?Innodb_buffer_pool_readsInnodb_buffer_pool_readsThenumberoflogicalreadsthatInnoDBcouldnotsatisfyfromthebuffer......
  • preflight request是什么
    preflightrequest,即预检请求(Pre-flightRequest),是浏览器在发送实际的CORS(Cross-OriginResourceSharing,跨源资源共享)请求之前进行的一种HTTPOPTIONS方法的请求。当发起一个非简单请求时(例如使用了自定义头信息、PUT、DELETE等方法,或者Content-Type不是安全值时),浏览器会自动发送......