HDU 6059 Kanade's trio(2017 Multi-University Training Contest 3)
来源:互联网 发布:烈焰传奇翅膀进阶数据 编辑:程序博客网 时间:2024/05/29 14:27
题目链接:Kanade’s trio
题意:给出一个序列A,问存在多少个不同的三元组满足
题解:对于每一个数,我们把它转化成30位的二进制形式,并按照序列顺序依次插入到0/1字典树中,插入过程中,我们把当前插入的数作为
我们考虑三个数
那么贡献共有3种,假设已经插入到了
(1).
(2).
(3).显然,在(2)中,存在不合法情况
综上,我们把每一个节点前两种贡献加起来然后减去第三种贡献即为最终答案。
#include <bits/stdc++.h>using namespace std;const int N = 500005*30;int a[N][30],sum[30][2],cnt[N],bs[N],n,id,k,st,t,d,dd;;int main(){ int T; scanf("%d",&T); while(T--){ for(int i=0;i<=id;i++){ for(int j=0;j<30;j++) a[i][j]=0; cnt[i]=bs[i]=0; } for(int i=0;i<30;i++) sum[i][0]=sum[i][1]=0; id=0; scanf("%d",&n); long long ans=0; for(int i=1;i<=n;i++){ scanf("%d",&k); st=0; for(int i=29;i>=0;i--){ t=(k>>i)&1; if(!a[st][t]) a[st][t]=++id; d=a[st][t]; dd=a[st][!t]; if(dd) ans+=1LL*cnt[dd]*(cnt[dd]-1)/2+ 1LL*cnt[dd]*(sum[i][!t]-cnt[dd])-bs[dd]; bs[d]+=sum[i][t]-cnt[d]; cnt[d]++; sum[i][t]++; st=d; } } printf("%lld\n",ans); } return 0;}
参考博客:
太阳星人FxxL
- HDU 6059 Kanade's trio(2017 Multi-University Training Contest 3)
- HDU 6059 Kanade's trio (字典树, 2017 Multi-Univ Training Contest 3)
- hdu 6058 Kanade's sum [区间第k大数求和] [2017 Multi-University Training Contest
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest
- 2017 Multi-University Training Contest 3 && HDOJ 6058 Kanade's sum 【链表模拟】
- HDU 6058 Kanade's sum (链表, 2017 Multi-Univ Training Contest 3)
- 2017 Multi-University Training Contest-第三场 Kanade's convolution(FWT)
- HDU 6059 Kanade's trio
- [HDU]6059 Kanade's trio
- HDU 6059 Kanade's trio
- hdu 6059 Kanade's trio
- HDU 3068 2017 Multi-University Training Contest
- HDU 6034 & 2017 Multi-University Training Contest
- hdu 6034 2017 Multi-University Training Contest
- HDU 3065 2017 Multi-University Training Contest
- HDU 6047 2017 Multi-University Training Contest
- HDU 6052 2017 Multi-University Training Contest
- HDU 6058 2017 Multi-University Training Contest
- PAT basic 1013
- 线程池的使用
- PAT basic 1014
- PAT basic 1014.2
- ionic入门之启动后会有短暂的白屏和黑屏
- HDU 6059 Kanade's trio(2017 Multi-University Training Contest 3)
- Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 解决方案
- PAT basic 1015
- sftp命令大全
- PAT basic 1017
- 小数化分数2
- HBase分布式集群部署
- 监听有线/蓝牙耳机的插入与拔出,电话的状态及拦截-Android
- PAT basic 1018