hdu5269ZYB loves Xor I
来源:互联网 发布:鬼畜调音软件 编辑:程序博客网 时间:2024/06/15 17:30
这个题还挺有意思的,虽然做法还是很显然的,但是还是值得写篇博客
标程是字典树,看起来比较蛋疼
直接分治就好了,
排序之后,使得ai不被排在它后面的管控,也就是lowbit(a[i])<=lowbit(a[j]),i<j
然后接下来分治,每次把区间分成两半,使得前面一半管控后面一半,一边拆一边算ans
这里,我直接写了一发dfs,很显然递归深度最多也就logA,放心跑
最后打出ans即可
排序的复杂度是nlognlogA
分治就是nlogA
时间主要花在排序上,事实上,排序的实际时间应该更好,所以跟标程的nlogA并没有太大区别
这里因为hd服务器的原因,交g++会蜜汁re,c++很快就过了
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 188 Accepted Submission(s): 103
Problem Description
Memphis loves xor very musch.Now he gets an array A.The length of A is n.Now he wants to know the sum of all (lowbit(Ai xor Aj )) (i,j∈[1,n])
We define that lowbit(x)=2k ,k is the smallest integer satisfied ((x and 2k )>0)
Specially,lowbit(0)=0
Because the ans may be too big.You just need to outputans mod 998244353
We define that lowbit(x)=
Specially,lowbit(0)=0
Because the ans may be too big.You just need to output
Input
Multiple test cases, the first line contains an integer T(no more than 10), indicating the number of cases. Each test case contains two lines
The first line has an integern
The second line hasn integers A1 ,A2 ....An
n∈[1,5∗104] ,Ai∈[0,229]
The first line has an integer
The second line has
Output
For each case, the output should occupies exactly one line. The output format is Case #x: ans, here x is the data number begins at 1.
Sample Input
254 0 2 7 052 6 5 4 0
Sample Output
Case #1: 36Case #2: 40
Source
BestCoder Round #44
#include<map>#include<string>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<queue>#include<vector>#include<iostream>#include<algorithm>#include<bitset>#include<climits>#include<list>#include<iomanip>#include<stack>#include<set>using namespace std;typedef long long ll;const int mod=998244353;int lowbit(int x){return x&-x;}int a[50010],n,ans;void dfs(int l,int r){if(l==r||a[l]==0)return;for(int i=l;i<=r;i++){int t=lowbit(a[i]);a[i]-=t;if(i==r)dfs(l,r);else if(t!=lowbit(a[i+1])){ans=(ans+ll(i-l+1)*(r-i)*t*2%mod)%mod;dfs(l,i);dfs(i+1,r);break;}}}bool cmp(int one,int two){while(1){int t1=lowbit(one),t2=lowbit(two);if(t2==0)return 1;else if(t1==0)return 0;if(t1<t2)return 1;else if(t1>t2)return 0;one-=t1;two-=t2;}}int main(){int T;scanf("%d",&T);for(int cs=1;cs<=T;cs++){int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",a+i);ans=0;sort(a,a+n,cmp);dfs(0,n-1);printf("Case #%d: %d\n",cs,ans);}}
0 0
- hdu5269ZYB loves Xor I
- 字典树 hdu5269 ZYB loves Xor I
- hdu 5269 ZYB loves Xor I
- hdu 5269 ZYB loves Xor I
- BestCoder#44 ZYB loves Xor I
- hdu 5269 ZYB loves Xor I
- HDOJ 5269 ZYB loves Xor I
- HDU 5269 ZYB loves Xor I
- HDU-5269 ZYB loves Xor I
- hdu5269 ZYB loves Xor I (字典树)
- HDU 5269 && BestCoder #44 1002 ZYB loves Xor I (分治)
- HDU5269 ZYB loves Xor I(分治?解法)
- HDU 5269 ZYB loves Xor I( 01 Trie 树)
- hdu 5269 ZYB loves Xor I && BestCoder Round #44
- HDU 5269 ZYB loves Xor I [01字典树]【思维】
- HDU 5269 ZYB loves Xor I(位运算)
- HDU 5269 ZYB loves Xor I 01trie
- hdu 5269 ZYB loves Xor I(字典树)
- secoway vpn client安装文件(包含Win7及Win早期版本)
- 欢迎使用CSDN-markdown编辑器
- 《Artech的ASP.NET系列》系列技术文章整理收藏
- PHP 数组遍历方法总结
- 黑马程序员——Java语法基础(二)
- hdu5269ZYB loves Xor I
- poj2752 Seek the Name, Seek the Fame
- 《Artech的WCF剖析系列》系列技术文章整理收藏
- Catch That Cow--poj3278
- 深入分析Java Web技术内幕_第一章 学习笔记
- Java编程思想_笔记(二)
- mongo与Java之aggregate
- 七、适配器模式
- LTE中的HARQ学习(1)——基本概念