首页 > TAG信息列表 > ull

树哈希 学习笔记

1.做法(from peehs_moorhsum) 设 \(h(u)\) 表示一个点的哈希值,\(f\) 为一随机函数。 \(h(u)=1+\sum\limits_{v\in son_{u}}f(h(v))\) 首先 \(f\) 的选择大概率是随机的,只要尽量不选多项式即可。(微调一下)。 ull d(ull x){ return x*x*x*19260817+20220827; } ull f(ull x){

A层省选3

A. 定位系统 不会,又是\(lct\),三场连着考,我该学学了。。 还有好多知识点没学,联赛前还想多刷点思维题,,,,,,难受 扔个暴力吧,找个度大于等于三的做根,然后记录一个点的子树内是否有发射器,当某个点有多于\(1\)棵子树没有发射器时,设置发射器到只剩一个没有的子树 除了找根为啥找度大于等于三的

SYZOJ 20220219 A 位置

written on 2022-02-21 因为第一次写字符Hash,所以贴一个类模板,当做入门 #include<bits/stdc++.h> typedef unsigned long long ull; using namespace std; const int base=131; int n; char a[100005]; ull f[100005],p[100005]; ull Hash(int l,int r){return f[r]-f[l-1]*p[r-l+

刷洛谷题单【数据结构1-3】

P1551 亲戚 题目描述 规定:\(x\) 和 \(y\) 是亲戚,\(y\) 和 \(z\) 是亲戚,那么 \(x\) 和 \(z\) 也是亲戚。如果 \(x\),\(y\) 是亲戚,那么 \(x\) 的亲戚都是 \(y\) 的亲戚,\(y\) 的亲戚也都是 \(x\) 的亲戚。第一行:三个整数 \(n,m,p\),(\(n,m,p \le 5000\)),分别表示有 \(n\) 个人,\(m\) 个亲

「Gym103069C」Random Shuffle

题目 点这里看题目。 分析 关键观察在于,这道题的 \(n\)​ 居然有一个较大的下界!!!正常题目 \(n\)​ 的最小值一般都是个位数,这道题样例中 \(n=50\)​??说明这道题思路必然是通过 \(a\)​ 得到关于 \(x\)​​ 的若干位的限制,然后暴力枚举检验。这样才能解释 \(n\)​ 为什么无法取到较小

HDU 3501 Calculation 2

题目链接 测试提交 一、题意 求解\(1\sim n\)与\(n\)不互质的数的和。 二、欧拉函数解法 定义:欧拉函数是小于\(n\)的数中与\(n\)互质的数的数目。 例如\(φ(8)=4\),因为\(1,3,5,7\)均和\(8\)互质。 \(sum(n)=\phi(1)+\phi(2)+\phi(3)+...+\phi(n-1)+\phi(n)\) 利用欧拉函数即可求解

字符串哈希

#include <bits/stdc++.h> /** * @brief * b站视频:https://www.bilibili.com/video/BV1Ha411E7re?spm_id_from=333.337.search-card.all.click&vd_source=13dfbe5ed2deada83969fafa995ccff6 * 其他资料:https://oi-wiki.org/string/hash/ * / using namespace std; t

【模板】数论板子

数论分块 用于求解 \[\sum\limits_{i=1}^{n}f_i\cdot \left\lfloor\dfrac{n}{i}\right\rfloor \]亦可求解多维 \[\sum\limits_{i=1}^{\min(n_1,n_2,\cdots,n_k)}(f_i\cdot \prod\limits_{j=1}^{k}\left\lfloor\dfrac{n_j}{i}\right\rfloor) \]前提是求出了数论函数\(f(n)\)的

2022湖北省赛 J. Palindrome Reversion (字符串哈希)

https://codeforces.com/gym/103729/problem/J 题意: 选择一个子串翻转一次,问是否能得到一个回文串 #include<bits/stdc++.h> //#include <bits/extc++.h> using namespace std; // using namespace __gnu_cxx; // using namespace __gnu_pbds; #define IOS ios::sync_with_stdio(

基础算法 841.字符串哈希

也叫字符串前缀哈希法。 例如字符串“ABCDEFGH”。 用h[0], h[1], h[2]......h[n]分别表示前n个字符的子串的哈希值。 将字符串看作为p进制的数字,再将其mod一个数,得到哈希值。 经验上来说,p一般为131,或1331。 mod的数为2^64。unsigned long long如果溢出,就相当于对它取模。 #inclu

【luogu P6621】【LOJ 3301】魔法商店(线性基)(保序回归)

魔法商店 题目链接:luogu P6621 / LOJ 3301 题目大意 给你 n 个物品,每个有魅力值和价格。 然后一组合法的方案定义为数量最多的一个物品集,使得每个非空子集魅力值的异或和都非 0。 然后你可以修改物品的价格,费用是价格差的平方。 然后给你两个合法方案,要你用最小的费用使得它们在所

字符串哈希

视频链接:             #include <iostream> using namespace std; typedef unsigned long long ULL; const int N = 1000010, P = 131; int n, m; char s[N]; // p[i]=P^i, h[i]=s[1~i]的hash值 ULL p[N], h[N]; // 预处理 hash函数的前缀和 void init(){ p[0] = 1,

a^b

code #include<iostream> #include<algorithm> using namespace std; #define ull unsigned long long ull quick_pow(ull a,ull b,ull p){ ull res=1; while(b){ if(b&1){ res=res*a%p; } b>>=1; a=a*a%p; } return res%p; } int main(

字符串哈希

【模板】字符串哈希 - 洛谷 1.哈希法:将字符串转化成某个进制的整数(大进制)否则容易造成哈希冲突,即不同的字符串转化的数却相同,再进行数字间不同的比较 #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; const ull mod=327819827801; ull a[100010

龟速幂

类似与快速幂。     由于数据范围很大,我们不能直接用a*b 否则会爆longlong。 我们同样可以采用将b拆分成其对应的二进制形式,然后再用a去乘。 比如说: 4*5 = 4 * (101) = 4*(2^2+2^0) 同样,不管b的二进制最后一位是否为1,a都要乘2,如果是1,结果就乘上a,如果是0,就不乘。然后去看b的下一

ACM C++基础算法模板

打表:质数 typedef unsigned long long ull; void prime(long long max,long long min=2){ if (max<2 || min>max) return; //cout<<"2 3 5 7 11"; for (ull i=min; i<=max; i+=2){ //只有奇数才可能是质数 ull ii=(ull)sqrt(i); //注意sqrt()返回值为浮点型,必须强制转换

【模拟赛】乌拉~~(重链剖分)

背景 大家好,我是一名勇敢的俄罗斯士兵,我昨天正在打 C o d e F o

洛谷 P5657 [CSP-S2019] 格雷码

题目 题目传送门 题解 n = 1时序列为 0 1 n = 2时序列为 00 01 11 10 n = 3时序列为 000 001 011 010 110 111 101 100 要求\(n\)位格雷码的第\(k\)个,按照题目方法构造即可 首先格雷码肯定是分为前一半跟后一半两个部分构造的。 假设\(k\)在\(n\)位格雷码的前一半,那么它的构造方式

数学技巧

数学技巧 题目 题目 越狱 典 \(简析\) 既然顺着题目想 很困难, 是否可以 "逆向"思维? ​ 答案为: \(m^n - m(m-1)^{n-1}\) AC代码 注意: \((a-b)\bmod p\) 在实现上应写成 \((a-b+p)\bmod p\) 快速幂 求 \(a^b\) .  由于 \(b=c_{k-1}2^{k-1} + c_{k-2}2^{k-2}+...+c_02^0\),

字符串哈希模板

字符串哈希 作用:快速查询子串,极快地比较两个字符串,以及还有其他用途。(比kmp泛用性更广) 原理:1. 将字符串的前缀和字符串数组想办法转换成数字; ​ 2.前缀和字符串数组转换为数字的方式,p进制转化十进制(秦九邵),“1234” ---> 1p0+2p1+3p^2+..... ​ 在这里使用ASCII 码作为基准数

【学习笔记】Min_25 筛

神仙 Min_25 发明的神奇筛子,用来筛积性函数前缀和。 对于要筛前缀和的积性函数 \(f(x)\),其具体要求是:\(f(p)\) 是一个简单多项式,\(f(p^e)\) 可以快速计算。 复杂度是亚线性的,但我不会证。 Description 对于一个积性函数 \(f(x)\) 的前缀和,我们可以做如下变换: \[\begin{aligned} \s

0x01位运算例题

a^b(AcWing89) 题目链接:a^b 涉及到快速幂的应用,详情见0x01位运算 AC代码: 点击查看代码 # include<bits/stdc++.h> using namespace std; typedef long long LL; LL qmi(LL a,LL b,LL p) { LL res=1; while(b) { if(b&1) res=(res%p*a%p)%p; a=a%p*a%p;

OJ 11007 组合数

OJ 11007 组合数 AC答案 AC答案 #include <stdio.h> typedef unsigned long long ULL; ULL xx(int n, int m) { ULL ans = 1; if(m <= n-m) m = n - m; for(int i=m+1; i<=n; i++) ans *= i; for(int i=1; i<=n-m; i++)

hash

1 利用一个随机数rand()对 每一个点 进行一个随机负值 利用 数的大小和 等等 来表示一些 关系 从而可以减少时间复杂度 和 思维难度; 要有4个rand()而且前面是 1ll 不然不行的。 1ll 很重要 例题: 天作之合 Description 对于一张n个点,m条边的无向图,若对于点i,j,除i,j 外其他所有点要么都

Hash&map

关于Hash:我不会 所以我们需要map 一、字符串Hash 就是一个公式 大概长这样 Hash(s)=(i=1∑len(s)​s[i]⋅blen−i)modm 看上去是不是很抽象? 因为我不会美观地写公式(技术硬伤) 所以引入大佬的博客   不用多说,上代码 #include<bits/stdc++.h> using namespace std; namespace _m