zoukankan      html  css  js  c++  java
  • CF1322B Present

    Jinnie

    看到莫名其妙的异或题,应该考虑按照位数处理。

    这样我们分别考虑每一位的答案,需要先取模。

    排序,让序列有了单调性,并且可以观察到,对于第k位只有两个数的和属于

    \([2^k,2^{k+1}-1]\cap[2^{k+1}+2^k,2^{k+2}-2]\)才行

    最后的右边界是什么东西?我们取模了啊.
    双指针解决。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    #include<cmath>
    #include<stack>
    #include<algorithm>
    #define int long long
    using namespace std;
    template<class T>inline void read(T &x)
    {
        x=0;register char c=getchar();register bool f=0;
        while(!isdigit(c))f^=c=='-',c=getchar();
        while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
        if(f)x=-x;
    }
    template<class T>inline void print(T x)
    {
        if(x<0)putchar('-'),x=-x;
        if(x>9)print(x/10);
        putchar('0'+x%10);
    }
    int n;
    int ans;
    int a[400005];
    int b[400005];
    int cal(int L,int R){
    	if(L>R) return 0;
    	int res=0;
    	int l=1;
    	int r=1;
    	for(int i=n;i>=1;--i){
    		while(l<=n&&b[i]+b[l]<L) ++l;
    		while(r<=n&&b[i]+b[r]<=R) ++r;
    		res+=r-l-(l<=i&&r>i);
    	}
    	return (res>>1)&1;
    }
    int deal(int x){
    	for(int i=1;i<=n;++i){
    		b[i]=(a[i]&((1<<(x+1))-1));
    	}
    	sort(b+1,b+n+1);
    	return cal(1<<x,(1<<(x+1))-1)^cal(3<<x,(1<<(x+2))-2);
    }
    signed main(){
    	read(n);
    	for(int i=1;i<=n;++i){
    		read(a[i]);
    	}
    	for(int i=0;i<26;++i){
    		ans|=deal(i)<<i;
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    随笔——关于读论文
    enumerate
    torch.max
    C# WPF侧边栏导航菜单(Dropdown Menu)
    C# WPF过渡效果实现(C# WPF Material Design UI: Transitions)
    用C# WPF简单实现仪表控件
    自定义滚动条(Custom ScrollBar)
    从头实现一个WPF条形图
    漂亮的无序列表样式
    C# WPF实用的注册窗体
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15511460.html
Copyright © 2011-2022 走看看