首页 > 其他分享 >10.5 George_Plover

10.5 George_Plover

时间:2022-10-06 11:01:34浏览次数:50  
标签:10 10.5 int 一个 maxn quad Plover include George

T1 简单点

image

简单点
因为没看清楚题意,\(eeeaaasssyy\) 实际只算一个

分析

从贪心的角度入手,每一个字符都匹配下一个必然最多
对于每一个\(e\) 找到最近的下一个\(a\)
对于每一个\(a\) 找到最近的下一个\(s\)
对于每一个\(s\) 找到最近的下一个\(y\)
对于每一个\(y\) 找到最近的下一个\(e\)
进行建边后得到一个 \(DAG\)
查询时,先找到最近的一个 \(e\), 然后开始跳
但跳的过程可以使用倍增

点击查看代码
#include<cstdio>
#include<iostream>
#include<cstring>
#define int long long
#define maxn 200010
using namespace std;

char s[maxn];
int ans,strt;
int len,m,l,r,fail[maxn],nex[maxn][21];
int qe[maxn],qa[maxn],qs[maxn],qy[maxn],tmpi,tmpj;
int tote,tota,tots,toty;
template<typename T>void read(T &x)
{
	x=0;char c=getchar();T neg=0;
	while(!isdigit(c))neg|=!(c^'-'),c=getchar();
	while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
	if(neg)x=(~x)+1;
}
template<typename T>void wr(T x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)wr(x/10);
	putchar((x-x/10*10)^48);
	return ;
}
signed main()
{
	freopen("easier.in","r",stdin);
	freopen("easier.out","w",stdout);
	scanf("%s",s+1);
	len=strlen(s+1);
	for(int i=1;i<=len;i++) 
	{
		if(s[i]=='e') qe[++tote]=i;
		if(s[i]=='a') qa[++tota]=i;
		if(s[i]=='s') qs[++tots]=i;
		if(s[i]=='y') qy[++toty]=i;
		
	}
	int i,j;
	i=j=1; while(i<=tote&&j<=tota){if(qe[i]<qa[j]) {nex[qe[i]][0]=qa[j],i++;continue;}else j++;}
	i=j=1; while(i<=tota&&j<=tots){if(qa[i]<qs[j]) {nex[qa[i]][0]=qs[j],i++;continue;}else j++;}
	i=j=1; while(i<=tots&&j<=toty){if(qs[i]<qy[j]) {nex[qs[i]][0]=qy[j],i++;continue;}else j++;}
	i=j=1; while(i<=toty&&j<=tote){if(qy[i]<qe[j]) {nex[qy[i]][0]=qe[j],i++;continue;}else j++;}
//  eesaseyaesasyy eeeaaasssyyy
	nex[len+1][0]=len+1;
	
	for(int j=1;j<=17;j++)
	{
		for(int i=1;i<=len+1;i++)
		{
			if(!nex[i][0]) nex[i][0]=len+1;
			nex[i][j]=nex[nex[i][j-1]][j-1]?nex[nex[i][j-1]][j-1]:len+1;
		}
			
	}
	scanf("%lld",&m);
	for(int i=1;i<=m;i++)
	{
		read(l); read(r);
		while(s[l]!='e') l++;
		int num=0;
		int st=l;
		for(int j=17;j>=0;j--) 
		{
			if(nex[st][j]<=r) 
			{
				st=nex[st][j];
				num+=(1<<j);
			}
			if(st==r) break;
		}
		wr((num+1)/4); putchar('\n');
	}
	return 0;
}
/*
eaeasyesasyea

eeeeyeeeeassssy

eeaseyaesasyy 
4
1 13 
2 12 
2 10 
3 11

eeeaaasssyyy
3
1 12 
2 12
1 11
*/

T2 不可做题

image

\(to\quad be\quad continue....\)

T3

image

分析

\(KMP\)
纯纯的暴力,先枚举所有因数 \(k\) ,对每一段前 \(k\) 个循环一遍如 \(abc\) 变为 \(abcabc\)
对于剩下的部分,每一个都 \(KMP\) 一次;
\(H ash\)
枚举 \(k\) ,计算每一串的哈希值,每次断开匹配,
如 \(aaaab\) 与 \(aaaba\) 可以拆开\(a\quad aaab\) 与 \(aaab \quad a\)

标签:10,10.5,int,一个,maxn,quad,Plover,include,George
From: https://www.cnblogs.com/llwwll/p/16757181.html

相关文章

  • 闲话 22.10.5
    闲话所以DTOIR2终于结束了我看你们还有什么法拿我开涮罪证我又复述了一遍lyin过来了“这是啥?……lyin都是……fengwu?”我:“啊对对对对对对对对对”“......
  • 10.5总结(完成)
    写在前面的话:暴力yyds!T1期盼:100实际:100题如其名,属实是签到题了。直接暴力,因为题目说拿走两个相同的数x后会放入数x+1,所以我一下子想到了二进制,把\(a_i\)个i当成在第i位......
  • 2022.10.5 总结
    A初始时只有\(a_k=1\),有\(m\)次操作,每次交换\(a_u,a_v\)的值,问忽略多少次操作可以使最终\(a_i=1\).简单DP即可。code#include<algorithm>#include<cstdio>#in......
  • 10.5 模拟赛
    \(\rmNOIP\)模拟赛\(\rmDate:10.5\)上次真是太变态了,这次就平和许多另外,不要在意accoders那丧心病狂的评测机速度了今天4道都是CF原题\(T1\)CF1252G一看上去居......
  • 2022.10.5 若干代数题
    链接对\(\foralla,b,c\ge0\)且满足\((a^2+b^2)(b^2+c^2)(c^2+a^2)=2\),求\(a+b+c\)的最值思考三元换二元链接对\(a,b,c\ge0\)且\(ab+bc+ca=1\),求\[P=\frac{a......
  • 2022.10.5 模拟赛
    T1签到题题面Description给定\(n\)个数,求出这\(n\)个数的一个非空子集,使得这个子集中的数的和能被\(n\)整除,无解输出\(-1\).Input第一行为数据组数\(T\)接下来\(T\)......
  • 2022.10.5java特性和优势
    Java构建工具:Ant,Maven,Jekins应用服务器:Tomcat,Jettty,Jboss,Websphere,weblogicWeb开发:Struts,Spring,Hibernate,myBatis开发工具:Eclipse,Netbean,intellij......
  • 10.4 George_Plover
    题面T1一道数学(博弈论)分析先手搓几个数据,找找规律,除非个数为1,其余的一旦先手先选,那一定先手获胜,反之必败那只用统计1的个数即可,但如果全是1,需要特判#include<cstdi......
  • Affinity Publisher for Mac(桌面排版神器)v1.10.5中文注册版
    你可能不知道,排版神器正式版AffinityPublisherforMac已经发布了!AffinityPublisherforMac中文注册版是创意软件工作室Serif旗下的一款桌面排版应用,可以帮助专业设计......
  • 10.5 函数参数定义_默认值参数
     deffun(a,b=10):print(a,b)#函数的调用fun(100)fun(20,30)print('hello',end='\t')#end实际默认值为\nprint('world')E:\PycharmProjects\pythonP......