首页 > 其他分享 >「杂题乱刷」洛谷 P10468 兔子与兔子

「杂题乱刷」洛谷 P10468 兔子与兔子

时间:2024-05-17 13:51:47浏览次数:12  
标签:洛谷 r1 r2 兔子 l2 long l1 杂题 define

题目链接

P10468 兔子与兔子

解题思路

字符串哈希板子题。

思路就是我们给字符串的每一个前缀和后缀都用一种特定的方式使其变为一个值,比如取一个乘数和模数,可以证明这样出错的概率极低。

参考代码

这里使用自然溢出三哈希。

#include<bits/stdc++.h>
using namespace std;
#define map unordered_map
#define forl(i,a,b) for(register long long i=a;i<=b;i++)
#define forr(i,a,b) for(register long long i=a;i>=b;i--)
#define forll(i,a,b,c) for(register long long i=a;i<=b;i+=c)
#define forrr(i,a,b,c) for(register long long i=a;i>=b;i-=c)
#define lc(x) x<<1
#define rc(x) x<<1|1
//#define mid ((l+r)>>1)
#define cin(x) scanf("%lld",&x)
#define cout(x) printf("%lld",x)
#define lowbit(x) (x&-x)
#define pb push_back
#define pf push_front
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
#define ll long long
#define ull unsigned long long
#define lcm(x,y) x/__gcd(x,y)*y
#define Sum(x,y) 1ll*(x+y)*(y-x+1)/2
#define aty cout<<"Yes\n";
#define atn cout<<"No\n";
#define cfy cout<<"YES\n";
#define cfn cout<<"NO\n";
#define xxy cout<<"yes\n";
#define xxn cout<<"no\n";
#define printcf(x) x?cout<<"YES\n":cout<<"NO\n";
#define printat(x) x?cout<<"Yes\n":cout<<"No\n";
#define printxx(x) x?cout<<"yes\n":cout<<"no\n";
ll t;
string s;
ll q,l1,l2,r1,r2;
long long Ss=chrono::steady_clock::now().time_since_epoch().count();
mt19937_64 Apple(Ss);
long long rand_lr(ll l,ll r){
	return Apple()%(r-l+1)+l;
}
ll pw1[1000010],pw2[1000010],pw3[1000010];
ll hash1[1000010],hash2[1000010],hash3[1000010];
ll Base1=779,Base2=223,Base3=667;
ll mod1=1e9+7,mod2=1e9+9,mod3=998244353;
void init()
{
	pw1[0]=pw2[0]=pw3[0]=1;
	forl(i,1,1e6+5)
		pw1[i]=pw1[i-1]*Base1;
	forl(i,1,1e6+5)
		pw2[i]=pw2[i-1]*Base2;
	forl(i,1,1e6+5)
		pw3[i]=pw3[i-1]*Base3;
	forl(i,1,(ll)s.size()-1)
		hash1[i]=(hash1[i-1]*Base1+s[i]);
	forl(i,1,(ll)s.size()-1)
		hash2[i]=(hash2[i-1]*Base2+s[i]);
	forl(i,1,(ll)s.size()-1)
		hash3[i]=(hash3[i-1]*Base3+s[i]);		
}
void solve()
{
	cin>>s>>q;
	s=' '+s;
	init();
	while(q--)
	{
		ll l1,l2,r1,r2;
		cin>>l1>>r1>>l2>>r2;
		printat((hash1[r1]-hash1[l1-1]*pw1[r1-l1+1])==(hash1[r2]-hash1[l2-1]*pw1[r2-l2+1]) &&
				(hash2[r1]-hash2[l1-1]*pw2[r1-l1+1])==(hash2[r2]-hash2[l2-1]*pw2[r2-l2+1]) &&
				(hash3[r1]-hash3[l1-1]*pw3[r1-l1+1])==(hash3[r2]-hash3[l2-1]*pw3[r2-l2+1]) );
	}
}
int main()
{
	IOS;
	t=1;
//	cin>>t;
	while(t--)
		solve();
	QwQ;
}

标签:洛谷,r1,r2,兔子,l2,long,l1,杂题,define
From: https://www.cnblogs.com/wangmarui/p/18197675

相关文章

  • 洛谷题单指南-动态规划3-P1220 关路灯
    原题链接:https://www.luogu.com.cn/problem/P1220题意解读:按坐标顺序排列1~n个路灯,每个路灯有不同的功耗,老张从位置c开始关灯,第一时间关掉c位置的灯,每次关掉一个灯之后,可以往右走、也可以往左走关下一个灯,老张速度是1m/s,求所有灯都关掉所消耗的最少功耗。解题思路:由题意分析,关......
  • 洛谷题单指南-动态规划3-P4342 [IOI1998] Polygon
    原题链接:https://www.luogu.com.cn/problem/P4342题意解读:环中节点表示数字,边表示运算符,可以任意断一条边,其余节点两两按边的符号计算,求结果的最大值,以及最大值是断开那些边可以得到。解题思路:题意中有几个个关键信息:环形,节点数为n,边数为n任意断一条边,即可以从任意节点开始,......
  • 洛谷题单指南-动态规划3-P1070 [NOIP2009 普及组] 道路游戏
    原题链接:https://www.luogu.com.cn/problem/P1070题意解读:1~n个环形机器人工厂,相邻工厂之间的道路是1~n,每个时刻可以从任意工厂购买机器人,走不超过p时间,不同工厂购买机器人花费不同的金币,不同时刻走到不同道路也能得到不同的金币,问一共m时间,最多可以得到多少金币(需减去购买机器人......
  • 最优化杂题乱讲
    你校的最优化杂题乱讲。保证难度随机排序,使用mt19937生成题目序列。最优化问题往往使用贪心,dp,二分,最短路解决。其中贪心往往可以通过感性理解,凭借人类本能想到贪心方式,继而写出正解,但有些比较厉害的题目却需要进行严谨的证明,而且可能会推出与感性结论相差很大的结论。dp则......
  • 洛谷题单指南-动态规划3-P1063 [NOIP2006 提高组] 能量项链
    原题链接:https://www.luogu.com.cn/problem/P1063题意解读:本质上是一个环形石子合并问题,计算合并产生的最大能量。解题思路:对于环形DP问题,可以把环拆开,并复制2倍长度,然后用1~n的区间长度去枚举1、状态表示设structnode{inthead,tail}用于表示每一个项链节点,其中有头、尾......
  • 洛谷题单指南-动态规划3-P4170 [CQOI2007] 涂色
    原题链接:https://www.luogu.com.cn/problem/P4170题意解读:长度为n的字符串,每次可以将连续一段填为同一个字符,求要填成目标串的最少填涂次数。解题思路:1、状态表示:设s表示目标字符串,dp[i][j]表示将i~j涂成目标"颜色"的最少次数2、状态转移考虑i~j的两端,当i==j,说明只有一个......
  • 洛谷P3556 [POI2013] MOR-Tales of seafaring的三种解法
    本题模板为奇偶最短路(边权为1时的),题目链接:https://www.luogu.com.cn/problem/P3556为了研究,码了三种不同最短路解放的奇偶做法,便于不同群体理解.一:BFS,对于边权为1,求最短路当然是BFS最快了,时间复杂度:o(nm),代码如下:点击查看代码//背景:我的BFS奇偶最短路尝试//思......
  • 洛谷题单指南-动态规划3-P1140 相似基因
    原题链接:https://www.luogu.com.cn/problem/P1140题意解读:两个只包含A、C、G、T4个字符的序列,根据已经定义好的字符-字符的相似度,计算两个序列最大的相似度,两个序列必须每个字符都配对,如果字符不够,可以插入'-'代替。解题思路:本题要解决几个问题:1、状态表示既然有两个序列,设......
  • 洛谷题单指南-动态规划3-P1880 [NOI1995] 石子合并
    原题链接:https://www.luogu.com.cn/problem/P1880题意解读:计算n堆石子合并的最小、最大得分,只不过这n堆石子是环形的,也就是首、尾也相邻,是区间DP的升级版-环形DP问题。解题思路:如果是常规区间DP的方法:对于n堆石子,考察区间的长度范围是1~n先枚举左端点i,范围是1~n再计算右......
  • 洛谷题单指南-动态规划3-P3205 [HNOI2010] 合唱队
    原题链接:https://www.luogu.com.cn/problem/P3205题意解读:给定理想队形,计算初始队形的方案数。解题思路:对于给定理想队形,最后一个人插入有两种可能:从左边插入、从右边插入从左边插入,则意味着前一个数比当前数大,前一个数有可能在左边也有可能在右边从右边插入,则意味着前一个数......