首页 > 其他分享 >[国家集训队] 拉拉队排练

[国家集训队] 拉拉队排练

时间:2024-02-02 23:00:16浏览次数:27  
标签:tmp return cur int 拉拉队 long 排练 国家集训队 mod

  • 添加分隔符的目的是给偶数长度的回文串一个中心,本题只要求奇数长度的回文串,那么这一步就可以省略了;而且,字符串加法非常慢
  • 利用回文串的另一半所携带的信息,注意不能超出回文串的范围
  • 边修改边询问,才需要用到高级数据结构;如果所有修改都在询问之前,就不需要了
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int ans[2000005],c[1000005],n,cnt[1000005];
long long k;
const int mod=19930726;
long long power(long long n,long long p)
{
	if(p==0)
	{
		return 1;
	}
	else if(p==1)
	{
		return n%mod;
	}
	else if(p%2==0)
	{
		long long tmp=power(n,p/2);
		return tmp*tmp%mod;
	}
	else
	{
		long long tmp=power(n,p/2);
		return tmp*tmp%mod*n%mod;
	}
}
int main()
{
	cin>>n>>k;
	string s;
	cin>>s;
	int id=0,mx=0;
	ans[0]=1;
	for(int i=1;i<s.size();i++)
	{
		int cur;
		if(i<=mx)
		{
			cur=min(ans[2*id-i],mx-i+1);
		}
		else
		{
			cur=1;
		}
		while(i+cur<s.size()&&i-cur>=0&&s[i+cur]==s[i-cur])
		{
			cur++;
		}
		ans[i]=cur;
		if(i+cur-1>mx)
		{
			mx=i+cur-1;
			id=i;
		}
	}
	for(int i=0;i<s.size();i++)
	{
		c[1]++;
		c[ans[i]*2]--;
	}
	for(int i=1;i<=n;i++)
	{
		cnt[i]=cnt[i-1]+c[i];
	}
	if(n%2==0)
	{
		n--;
	}
	long long mul=1;
	for(int i=n;i>=1;i-=2)
	{
		if(k<=cnt[i])
		{
			mul=mul*power(i,k)%mod;
			k=0;
			break;
		}
		else
		{
			k-=cnt[i];
			mul=mul*power(i,cnt[i])%mod;
		}
	}
	if(k==0)
	{
		cout<<mul<<endl;
	}
	else
	{
		puts("-1");
	}
	return 0;
}

标签:tmp,return,cur,int,拉拉队,long,排练,国家集训队,mod
From: https://www.cnblogs.com/watersail/p/18004183

相关文章

  • P1829 [国家集训队] Crash的数字表格 / JZPTAB
    \[\sum\limits_{i=1}^N\sum\limits_{j=1}^M\frac{ij}{\gcd(i,j)}\]\[\sum\limits_{d=1}^N\frac1d\sum\limits_{i=1}^N\sum\limits_{j=1}^Mij[\gcd(i,j)=d]\]\[\sum\limits_{d=1}^Nd\sum\limits_{i=1}^{\lfloor\fracNd\rfloor}\sum\limits_......
  • [国家集训队] 矩阵乘法 整体二分
    [国家集训队]矩阵乘法题目描述给你一个\(n\timesn\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(k\)小数。输入格式第一行有两个整数,分别表示矩阵大小\(n\)和询问组数\(q\)。第\(2\)到第\((n+1)\)行,每行\(n\)个整数,表示这个矩阵。第\((i+1)\)行......
  • P1527 [国家集训队] 矩阵乘法
    题意给定一个矩阵,每次询问子矩阵的第\(k\)大。Sol考虑把莫队扔到二维上来做。发现复杂度变为:\(O(n^2q^{\frac{3}{4}})\)。卡卡常就过了。Code#include<iostream>#include<algorithm>#include<cstdio>#include<array>#include<cmath>#include<vector>#i......
  • [国家集训队] 阿狸和桃子的游戏
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+10;intn,m;intk[N],a,b,c;intval[N];//如果一条边的两端点被同一个人选了,那么产生边权的贡献//把边权均分到两端点上,每个端点加上c/2//如果这条边被同一个选了,那......
  • P2757 [国家集训队] 等差子序列
    P2757[国家集训队]等差子序列在线段树存哈希的时候,注意字符长度的改变,否则query会崩掉lolquery(intu,intl,intr,intlft,intrht){if(lft<=l&&r<=rht)returntr[u];else{intmid=(l+r)>>1;if(rht<=......
  • P2371 [国家集训队] 墨墨的等式
    题目大意对于等式\(\displaystyle\sum_{i=1}^{n}a_ix_i=b\)求有多少\(b\in[l,r]\)使得等式存在非负数解。思路典型的同余最短路,可先看看跳楼机(题解)。首先想到将区间\([l,r]\)分开,分为\([0,l-1]\)和\([0,r]\)再答案相减。所以我们只需要能求得\([0,x]\)的答案即......
  • Tarjan 例题:洛谷P1407 [国家集训队] 稳定婚姻
    在洛谷中查看题意:自己读一下,大致就是\(2n\)个点,每个点编号为\(1-2n\),\(\lfloor编号/2\rfloor\)相同的点连条边。然后再给\(m\)条边。问:将每个\(\lfloor编号/2\rfloor\)相同的点间连的边断开,还能不能使每个编号为奇数的点都有一个编号为偶数的点对应。这个......
  • 题解 [国家集训队] 稳定婚姻
    题目链接首先我们考虑用图论的边描述这个关系。若两者存在夫妻或情侣关系,就连一条边(是有向边还是无向边呢?)。先来考虑两对夫妻的情况,若夫妻边与情侣边交替出现。且一对夫妻在同一个环内,则可以说明分开后能够重新找到另一半。如下图:夫妻a-男b-女c-男d-女情侣a-男d-女c-......
  • [国家集训队] Tree II 题解报告
    [国家集训队]TreeII一道·真·板子·题就是练习LCT懒标记的题目除了翻转标记以外还要维护乘法标记和加法标记注意加法标记和乘法标记的维护!!!加法标记因为splay的区间大小不是固定的,所以我们要维护size,并且子树的sum要加上size乘上标记其他的就只用直接加上即可voidpusha......
  • 题解 P2839【[国家集训队] middle】
    Problem一个长度为\(n\)的序列\(a\),设其排过序之后为\(b\),其中位数定义为\(b_{n/2}\),其中\(a,b\)从\(0\)开始标号,除法下取整。给你一个长度为\(n\)的序列\(s\)。回答\(Q\)个这样的询问:\(s\)的左端点在\([a,b]\)之间,右端点在\([c,d]\)之间的子区间中,最大的中......