洛谷3760,异或和
2017-06-13 22:01
204 查看
一开始看到这题,n只到105,在想能不能暴力卡常一波艹过去,最后本地死活要跑1.6s,要是机子快点-1s?就好了。
然后我太菜了,死活做不出,百度出了个题解,挺好的。
下面是暴力卡常的代码,强行CPU并发,并没有出现所谓的O(n2)过106,可能是我姿势不对吧,哪位大佬能教教我正确的循环展开姿势?
然后我太菜了,死活做不出,百度出了个题解,挺好的。
#include<cstdio> #include<cctype> inline int getint(){ int x=0; char c=getchar(); while(!isdigit(c))c=getchar(); for(;isdigit(c);c=getchar())x=x*10+c-48; return x; } struct treearray{ static const int maxn=5100000; int a[maxn],l[maxn],n; void init(int x){ n=x; for(int i=1;i<=x;i++)a[i]=0; } void add(int x,int y){ ++x; for(int i=x;i<=n;i+=i&-i)a[i]+=y; } 11842 int query(int x){ ++x; int ans=0; for(int i=x;i;i-=i&-i)ans+=a[i]; return ans; } int sum(int x,int y){ return query(y)-query(x-1); } }t1,t0; const int N=100010; int n,i,j,m,s ,x,y,ans; int main(){ n=getint(); for(i=1;i<=n;++i)s[i]=getint()+s[i-1]; for(j=0;1<<j<=s ;++j){ t1.init(x=1<<j); t0.init(x); y=0; //t0.add(0,1); for(i=1;i<=n;++i) if(x&s[i])y+=1+t0.query(s[i]&(x-1))+t1.sum((s[i]&(x-1))+1,x-1),t1.add(s[i]&(x-1),1); else y+=t1.query((s[i]&(x-1)))+t0.sum((s[i]&(x-1))+1,x-1),t0.add(s[i]&(x-1),1); ans|=(y&1)<<j; } printf("%d\n",ans); return 0; }
下面是暴力卡常的代码,强行CPU并发,并没有出现所谓的O(n2)过106,可能是我姿势不对吧,哪位大佬能教教我正确的循环展开姿势?
#pra\ gma GCC optimize("O2") #include<iostream> #include<cstdio> #include<cctype> using namespace std; inline int getint(){ int x=0; char c=getchar(); while(!isdigit(c))c=getchar(); for(;isdigit(c);c=getchar())x=x*10+c-48; return x; } const int N=100010; int s ,x,n,i,ans,*p,*e; int main(){ n=getint(); for(i=1;i<=n;++i){ x=getint(); s[i]=s[i-1]+x; } e=s+n; for(i=1;i<=n;++i){ x=s[i-1]; for(p=&s[i];p+14<=e;p+=15){ ans^=((*p)-x)^(*(p+1)-x)^(*(p+2)-x)^(*(p+3)-x)^(*(p+4)-x)^(*(p+5)-x)^(*(p+6)-x)^(*(p+7)-x)^(*(p+8)-x) ^(*(p+9)-x)^(*(p+10)-x)^(*(p+11)-x)^(*(p+12)-x)^(*(p+13)-x)^(*(p+14)-x); } for(;p<=e;++p)ans^=(*p)-x; } cout<<ans<<endl; return 0; }
相关文章推荐
- [BZOJ4888][洛谷3760]异或和 树状数组
- 洛谷 P2420 让我们异或吧 树形dp
- 洛谷 P1469 找筷子(异或的利用)
- 洛谷 P3359 改造异或树
- 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
- AC日记——让我们异或吧 洛谷 P2420
- 洛谷——P2420 让我们异或吧
- 【LCA】洛谷2420[让我们异或吧]题解
- 洛谷—— P3908 异或之和
- 洛谷P2420 让我们异或吧 树上差分 dfs
- 洛谷 P2962 高斯消元解异或方程
- 洛谷P4462 [CQOI2018]异或序列(莫队)
- 洛谷3359改造异或树
- 洛谷 1156 dp
- 洛谷 2680[NOIP2015] 运输计划 二分+lca+树上差分+dfs序
- 洛谷 1156 dp
- 洛谷P1346 电车
- 洛谷 1052 dp 状态压缩
- 洛谷 1352 没有上司的舞会 树形DP
- 洛谷 2921 记忆化搜索 tarjan 基环外向树