TOJ 4114 Evaluate Xor

原创 2015年07月10日 14:16:54

For AC this problem ,I consult AClavin's code ,For clearly knowing the code's operational principle.I research the code ...hours.Too hard to understanding.

The portal:http://acm.tju.edu.cn/toj/showp4114.html

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>

const int N = 1e5+5;
const int M = 1e6+5;

int a[N];
int Bit[M<<1];

void Insert(int x,int value){
    for(int i = x ; i<= M ; i+= i & (-i)){
        Bit[i] += value;
    }
}

int Query(int x){
    int ret = 0;
    if(x <= 0) return ret;
    for(int i = x; i ; i -= i & (-i)){
        ret += Bit[i];
    }
    return ret;
}

void Deal_with(){
    int T;
    scanf("%d",&T);
    memset(Bit,0,sizeof(Bit));
    while(T--){
        int n;
        scanf("%d",&n);
        int tempa;
        a[0] = 0;
        for(int i=1;i<=n;i++){
            scanf("%d",&tempa);
            a[i] = a[i-1] + tempa;
        }
        int up = floor(log(a[n])/log(2.0));
        //up is the floor of bit of answer.
        int res = 0;
        for(int l = up ;l >= 0;l--){
            int lim = 1 << l , Mod = lim << 1;
            int tmp = 0;
            // tmp calculate there is how many '1' in this bit.
            Insert(1,1);
            //Add 1 for every Bit array's member just for avoid tree_array query '0'.
            //Insert(1,1) is Insert 0 to Bit array , the value of '0' is 1;
            for(int i=1;i<=n;i++){
                int s = (a[i] + 1) % Mod;
                int e = (a[i] + lim) % Mod;
                // when bit is '1' , lim = 2 ,mod = 4;
                // Array a = 1,3,5,6;
                if(s > e){
                    tmp += i - Query(s);
                    //Mimic to get a higher bit digital.
                    // 6 = (110); a[i] = (10); s = (10) ;if you can find ki (10) .. (11);a[i] - ki '1' bit will change to 1.
                    tmp += Query(e+1);
                    //Mimic a[i] - a[k] k = 1..i Have or not i bit digital.
                    // 3 = (11);  a[i] = (11); e = (01) ;if you can find ki (00) ... (01);a[i] - ki '1' bit will still be '1'.
                }
                else {
                    tmp += Query(e+1) - Query(s);
                    //Mimic to get a higher bit digital.
                    //5 = (101) ;a[i] = (01); s = (01) ; e = (11) ;if you can find ki (01)..(11);a[i] -ki '1' bit will change to 1.
                }
                Insert(a[i]+1,1);
            }
            if(tmp & 1) res += lim;
            Insert(1,-1);
            for(int i=1;i<=n;i++){
                Insert(a[i]+1,-1);
                a[i] &= (lim - 1);
            }
        }
        printf("%d\n",res);
    }
}

int main(void){
    //freopen("a.in","r",stdin);
    Deal_with();
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

XOR 异或的性质及应用

异或的性质及运用  异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔...
  • u013797029
  • u013797029
  • 2015年01月23日 12:18
  • 1158

关于Evaluate的使用

关于Evaluate的使用一些话最近事情有点多,时间序列分析好久没有更新了。在这里先说一下,整个六月份时间序列分析的文章应该有不会再更新了,到了七月份再开始更新。之后可能还会有多元统计的文章,到时候看...
  • WMN7Q
  • WMN7Q
  • 2017年06月09日 10:50
  • 444

Oracle BIEE EVALUATE系列使用数据库函数

Oracle BIEE11中提供了EVALUATE这个函数,扩展了可以使用oracle函数的功能.  以前看过晃晃悠悠写的EVALUATE的用法。我想补充另外用法。    EVALUATE系列...
  • Rainmt_Tank
  • Rainmt_Tank
  • 2015年09月15日 13:35
  • 1082

RFS的web自动化验收测试——第14讲 万能的evaluate

引言:什么是RFS——RobotFramework+Selenium2library   这一讲我们重点来介绍一下一个常用的关键字evaluate。   我觉得这个关键字在RF里几乎是无所不能,只要你...
  • tulituqi
  • tulituqi
  • 2013年09月10日 22:43
  • 29099

异或(XOR)运算加密/解密算法

本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算。本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象。   XOR算法原理   从加密的主要方法看,换位法过于简单,特别...
  • hsxbbsd71st
  • hsxbbsd71st
  • 2014年05月05日 22:17
  • 2235

RobotFrameWork(四)变量运算与Evaluate

本文旨在介绍robotframework中特殊变量运算和Evaluate简单使用
  • liuheng123456
  • liuheng123456
  • 2013年08月28日 16:08
  • 10285

xor 逻辑异或

定义 Exclusive OR(异-或运算) 异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。其运算法则为: a^b=(a' and b) or (a and b')(a'为...
  • liuj2511981
  • liuj2511981
  • 2013年04月08日 15:32
  • 2851

tensorflow的变量的初始化,张量的计算取值

____tz_zs 本篇为学习tensorflow为加深对计变量的初始化,张量的计算取值的理解所写的小Demo。因作者水平限制,可能有些片面或错误,欢迎指出,共同进步。 # -*- codin...
  • tz_zs
  • tz_zs
  • 2017年07月31日 21:59
  • 1358

《Deep Learning》译文 第六章 深度前馈网络 从异或函数说起

6.1 从异或函数说起              为了使前馈网络的概念更具体化,我们先从一个简单地例子说起,这个例子中,我们使用前馈网络解决一个简单的任务:学习异或函数。              众...
  • kai940325
  • kai940325
  • 2016年07月13日 14:21
  • 1847

机器学习入门--MNIST(二)

最近在根据极客学院的TensorFlow的官方文档-“深入MNIST”学习并做成Demo,中间遇到一些问题,现整理如下,以免遗忘。 文档的这一章节先继续上一章节“MNIST机器学习入门”的内容,并对上...
  • sarsscofy
  • sarsscofy
  • 2017年11月23日 17:45
  • 387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TOJ 4114 Evaluate Xor
举报原因:
原因补充:

(最多只允许输入30个字)