哈希
哈希的要点:设计合适的哈希函数,使得你想要保留的特征被保留,不希望保留的特征不被保留。
[ABC250E] Prefix Equality
发现这题对于数的位置我们并不希望保留,数的值我们希望保留,我们用异或哈希或和哈希,不过每个值用随机数代替,去重条件我们用不进行操作替代。
#include<bits/stdc++.h> #define ll long long #define int ll #define ls a[p].l #define rs a[p].r #define re register #define pb push_back #define pir pair<int,int> #define f(a,x,i) for(int i=a;i<=x;i++) #define fr(a,x,i) for(int i=a;i>=x;i--) using namespace std; const int N=3e5+10; const int M=2e4+10; const int mod=1e9+7; mt19937 rnd(251); int n; int bs=31; int a[N]; int b[N]; int f1[N]; int f2[N]; map<int,int> mp; map<int,int> vis1,vis2; signed main(){ // freopen("a.in","r",stdin); // freopen("a.out","w",stdout); ios::sync_with_stdio(0); cin.tie(nullptr); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; if(mp[a[i]]==0){ mp[a[i]]=rnd(); } } for(int i=1;i<=n;i++){ cin>>b[i]; if(mp[b[i]]==0){ mp[b[i]]=rnd(); } } for(int i=1;i<=n;i++){ if(vis1[a[i]]!=0){ f1[i]=f1[i-1]; } else{ vis1[a[i]]=1; f1[i]=f1[i-1]^mp[a[i]]; } } for(int i=1;i<=n;i++){ if(vis2[b[i]]!=0){ f2[i]=f2[i-1]; } else{ vis2[b[i]]=1; f2[i]=f2[i-1]^mp[b[i]]; } } int m; cin>>m; for(int i=1;i<=m;i++){ int x,y; cin>>x>>y; if(f1[x]==f2[y]){ cout<<"Yes\n"; } else{ cout<<"No\n"; } } return 0; }
标签:
哈希
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具