zoukankan      html  css  js  c++  java
  • Codeforces Round #626 Div. 2 D. Present(二分 状态压缩)

    https://codeforces.com/contest/1323/problem/D

     上个题解....

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 4e5+5;
     5 int a[maxn],b[maxn];
     6 int n; 
     7 int main(){
     8     scanf("%d",&n);
     9     int ans = 0;
    10     for(int i = 1;i<=n;i++) scanf("%d",&a[i]);
    11     for(int i = 0;i<25;i++){ //最多25位 
    12         for(int j = 1;j<=n;j++) b[j] = a[j]%(1<<(i+1));
    13         sort(b+1,b+1+n);
    14         for(int j = 1;j<=n;j++){
    15             int l = max(0,(1<<i)-b[j]);//第一段区间的左端点 
    16             int r = ( (1<<(i+1) ) - 1) - b[j] ;//第一段区间的右端点 
    17             int range = upper_bound(b+1,b+j,r)-lower_bound(b+1,b+j,l);
    18             if(range&1) ans^=(1<<i);
    19             l = max(0,( (1<<(i+1)) +(1<<i)-b[j] ) );//第二段区间的左端点 
    20             r = ( (1<<(i+2)) -1)-b[j];//第二段区间的右端点 
    21             range = upper_bound(b+1,b+j,r)-lower_bound(b+1,b+j,l);
    22             if(range&1) ans^=(1<<i); 
    23             //用二分求出区间长度range 
    24         } 
    25     }
    26     printf("%d",ans);
    27     return 0;
    28 }
    View Code
  • 相关阅读:
    excel表中的一列,如何去除重复项
    Notepad++ 列操作
    mysql 登陆其它服务器
    贪心算法处理背包问题
    分治法处理排序问题
    回溯法_皇后问题
    动态规划算法的java实现
    人事管理系统
    java复习笔记
    核心动画-翻页效果的实现
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12445341.html
Copyright © 2011-2022 走看看