当前位置: 首页 > news >正文

连云港建设局网站简约型网站

连云港建设局网站,简约型网站,网站做权重有用吗,网站建设及维护课件免费有点难😅 真的是 A B C ABC ABC的难度吗😅 非常精妙的哈希题目。 定义矩阵乘法: c i , j ⊕ ( a i , k & b k , j ) c_{i,j}\oplus (a_{i,k}\& b_{k,j}) ci,j​⊕(ai,k​&bk,j​) 之所以可以矩阵乘法是因为满足 ( a ⊕ b )…

有点难😅

真的是 A B C ABC ABC的难度吗😅

非常精妙的哈希题目。

定义矩阵乘法: c i , j = ⊕ ( a i , k & b k , j ) c_{i,j}=\oplus (a_{i,k}\& b_{k,j}) ci,j=(ai,k&bk,j)

之所以可以矩阵乘法是因为满足 ( a ⊕ b ) & c = ( a & c ) ⊕ ( b & c ) (a\oplus b)\& c=(a\& c)\oplus (b\& c) (ab)&c=(a&c)(b&c)

其实非常好验证,就把两个运算符按顺序写下来,然后把括号拆开,看等式两边是否恒等即可。

定义对于序列 { a i } \{a_i\} {ai}的哈希规则为,将每个 a k a_k ak与上 k − 1 k-1 k1 p p p后的结果全部异或起来

因为 ( a ⊕ b ) & p = ( a & p ) ⊕ ( b & p ) (a\oplus b)\&p=(a\& p)\oplus (b\& p) (ab)&p=(a&p)(b&p),所以如果 c i = a i ⊕ b i c_i=a_i\oplus b_i ci=aibi,那么 { c i } \{c_i\} {ci}的哈希值就是把 { a i } \{a_i\} {ai} { b i } \{b_i\} {bi}对应的哈希值异或起来

但是发现与上的 p p p都是相同的,所以这个方案冲突的概率很大

仔细观察正解的代码,发现他是把 p p p设计成了一个 M × M M\times M M×M 01 01 01矩阵 (其中 M M M表示二进制位数,也就是 64 64 64), a i a_i ai看成一个长度为 M M M 01 01 01向量 ,这个向量的第 i i i位就是 a i a_i ai在二进制下的第 i i i

不妨形式化的写一下,首先我们随机一个矩阵 p p p,哈希值就是 ⊕ i = 1 n v i p i − 1 \oplus_{i=1}^nv_ip^{i-1} i=1nvipi1。发现 c i = a i ⊕ b i c_{i}=a_{i}\oplus b_{i} ci=aibi那不就是把两个向量做按位异或吗。

直接倍增的复杂度是 O ( n M 3 log ⁡ n ) O(nM^3\log n) O(nM3logn),考虑优化。

注意到是 01 01 01矩阵,所以可以把同一行压成一个 64 64 64位整数,这样转移优化到了 O ( M 2 ) O(M^2) O(M2)

最终复杂度 O ( n M 2 log ⁡ n ) O(nM^2\log n) O(nM2logn)。瓶颈在于倍增预处理,不知道可不可以做的更好。

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define ull unsigned long long
using namespace std;
const int N=5e5+5;
const int M=64;
mt19937_64 t(time(0));
struct Matrix{ull c[M];Matrix(){memset(c,0,sizeof c);}Matrix operator *(const Matrix &a)const{Matrix r;for(int i=0;i<M;i++){for(int j=0;j<M;j++){if(c[i]>>j&1){r.c[i]^=a.c[j];}}}return r;}
}pw[20];
int n,m;
ll a[N];
ull st[N][20];
ull get(ull x,Matrix y){ull res(0);for(int i=0;i<M;i++){if(x>>i&1)res^=y.c[i];}return res;
}
void write(ull x){if(x<10){cout<<(char)('0'+x);return;}write(x/10),cout<<(char)('0'+x%10);
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;srand(time(0));for(int i=1;i<=n;i++)cin>>a[i],st[i][0]=a[i];for(int i=0;i<M;i++){pw[0].c[i]=t();}for(int i=1;i<20;i++)pw[i]=pw[i-1]*pw[i-1];for(int j=1;j<20;j++){for(int i=1;i<=n-(1<<j)+1;i++){st[i][j]=st[i][j-1]^get(st[i+(1<<j-1)][j-1],pw[j-1]);}}for(int i=1;i<=m;i++){int b,c,d,e,f,g;cin>>b>>c>>d>>e>>f>>g;for(int j=19;j>=0;j--){if(b+(1<<j)-1<=c&&f+(1<<j)-1<=g&&(st[b][j]^st[d][j])==st[f][j]){b+=(1<<j),d+=(1<<j),f+=(1<<j);}}if(b>c){if(f>g)cout<<"No"<<"\n";else cout<<"Yes"<<"\n";}else{if(f>g)cout<<"No"<<"\n";else if((a[b]^a[d])<a[f])cout<<"Yes"<<"\n";else cout<<"No"<<"\n";}}
}
http://www.yayakq.cn/news/320419/

相关文章:

  • 泗水做网站制作书签简单又漂亮
  • 网站备案哪个局管代理公司收费标准
  • 免费数据网站网站背景特效
  • 做网站都需要学什么网站制作的重要性
  • 做网站是什么做网站的应该怎么发广告
  • 金华市建设局网站贾润根进一步加大网站集约化建设力度
  • 开网站要多少钱做水印的网站
  • 网站版面做得好的四川百度推广和seo优化
  • 淄博乐达网站建设电子商务网站开发需要注意问题
  • 类似wordpress的网站网站及邮件系统建设
  • 无锡工厂网站建设女生学计算机哪个专业简单
  • 计算机网站建设与管理是什么意思网页开发用什么语言
  • sns社交网站开发教程网站的二级页面怎么做代码
  • 一起做彩票网站的人网络营销媒体有哪些
  • 怎样与知名网站做友情链接在住房城乡建设部网站上哪里下载规范
  • 建设公司网站需要多少天建设银行金牛支行网站
  • 手表排名哪个网站好手机优化软件哪个好
  • 用猴子做标志起网站名叫什么好广告营销公司
  • 哪些网站可以免费申请域名看电视剧的免费网站
  • 网站建设问题清单古建设工程造价管理协会网站
  • 网站优化策划方案黄骅市美食
  • 仿朋友圈网站建设做会员体系的网站
  • 基于c 的网站开发国内主机wordpress
  • 电子商务网站建设流程是什么视频网站开发前景
  • 淄博网站推广公司那些高明做网站
  • 购物网站开发思路网站界面友好
  • 工程施工公司windows优化大师手机版
  • 冠县网站建设网页制作专业软件
  • 蓝色网站欣赏建网通
  • 寻花问柳专注做一家男人喜欢的网站本单位二级网站建设管理制度