loj#502. 「LibreOJ β Round」ZQC 的截图
离线做法显然 顺便开个桶记录下就好。
在线可以将桶换为主席树,一次增加 个点。被卡了
考虑非正解做法。
我们在 下运算的话,可以得到对于 3 个东西的判定。
1. ,因为 。
2. 如果只有一个,不满足,那么 ,那么只要检验是否有一个的 倍是整条路径权值和即可。
3. 显然。
增加正确率由于 ,可以看做在 进制下运算,多加几位即可。
找显然哈希表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <vector> #include <cmath> #include <queue> #include <map> #include <ctime> #define ll long long using namespace std; int rd() { int f=1,sum=0; char ch= getchar (); while (! isdigit (ch)) { if (ch== '-' ) f=-1;ch= getchar ();} while ( isdigit (ch)) {sum=(sum<<3)+(sum<<1)+ch- '0' ;ch= getchar ();} return sum*f; } ll lrd() { ll f=1,sum=0; char ch= getchar (); while (! isdigit (ch)) { if (ch== '-' ) f=-1;ch= getchar ();} while ( isdigit (ch)) {sum=(sum<<3)+(sum<<1)+ch- '0' ;ch= getchar ();} return sum*f; } const int N=( int )(2e6+5),mod=10000007,W=36; struct HASH { struct node { int uid,nex; ll val; }H[mod+2]; int tot,head[mod+2]; void clear() { tot=0; memset (head,0, sizeof (head)); } int Find(ll v) { for ( int i=head[v%mod];i;i=H[i].nex) if (H[i].val==v) return i; return -1; } int query(ll v) { int qwq=Find(v); if (~qwq) return H[qwq].uid; return -1; } void ins(ll v, int idd) { int qwq=Find(v); if (~qwq); else { H[++tot].uid=idd; H[tot].nex=head[v%mod]; H[tot].val=v; head[v%mod]=tot; } } }Hash; ll val[N],sum[N]; int n,m; ll get_rand() { ll res=0; for ( int i=0;i<W;i++) res=res*3+( rand ()%3); return abs (res); } ll merge(ll x,ll y) { ll res=0,p=1; while (x||y) { res+=p*((x+y)%3); x/=3; y/=3; p*=3; } return res; } int main() { srand (19260817); n=rd(); m=rd(); for ( int i=1;i<=n;i++) { val[i]=get_rand(); Hash.ins(val[i],i); Hash.ins(merge(val[i],val[i]),i); //cout<<merge(val[i],val[i])<<endl; //cout<<val[i]<<endl; } int ans=0,x,y; for ( int i=1;i<=m;i++) { x=rd(); y=rd(); x^=ans; y^=ans; sum[i]=merge(val[x],sum[y]); //cout<<sum[i]<<endl;//cout<<x<<" "<<y<<endl; if (!sum[i]) ans=-1; else { ans=Hash.query(sum[i]); if (ans==-1) ans=-2; //cout<<ans<<endl; } printf ( "%d\n" ,ans); } } |
__EOF__

本文作者:F x o r G
本文链接:https://www.cnblogs.com/xugangfan/p/15158684.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/xugangfan/p/15158684.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】