关闭

超级绵羊异或

228人阅读 评论(0) 收藏 举报
分类:

题目大意

求 (a) xor (a + b) xor (a + b * 2) xor … xor (a + b * (n - 1))。

题解

考虑计算答案第k位是否为1。
对于一个a+bi,判断它第k位是否为1。
那么就是看a+bi2k是否是奇数。
然后发现我们可以写出这样一个式子,判断它的奇偶性。
n1i=0a+bi2k
这是经典的类欧几里得算法,在模2意义下进行即可。

#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int maxd=62,mo=2;
int i,j,k,l,t,n,m,ca,a,b;
ll ans,x,last;
ll likegcd(ll a,ll b,ll c,ll n){
    if (!a) return 0;
    if (a>=c||b>=c){
        ll t=likegcd(a%c,b%c,c,n);
        ll l=(a/c)*(n*(n+1)/2%mo)%mo+(b/c)*(n+1)%mo;
        (l+=t)%=mo;
        return l;
    }
    ll m=(a*n+b)/c;
    ll t=likegcd(c,c-b-1,a,m-1);
    t=(n*m%mo-t)%mo;
    (t+=mo)%=mo;
    return t;
}
int main(){
    freopen("shxor.in","r",stdin);freopen("shxor.out","w",stdout);
    scanf("%d",&ca);
    while (ca--){
        scanf("%d%d%d",&n,&a,&b);
        if (b==0){
            if (n%2==1) printf("%d\n",a);else printf("0\n");
            continue;
        }
        ans=0;
        x=1;
        fo(k,0,maxd){
            if (likegcd(b,a,x,n-1)) ans^=x;
            x*=2;
        }
        printf("%lld\n",ans);
        /*if (ans==0&&last==174374687) printf("%d %d %d\n",n,a,b);
        last=ans;*/
    }
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

游戏老虎吃绵羊 -- lua

简介: 游戏双方分别使用绵羊和老虎 0  ----    0  ----    0  ----    0  ----    0 |&...
  • piaobotudou
  • piaobotudou
  • 2014-08-05 21:39
  • 2372

BZOJ 2002 Bounce 弹飞绵羊(分块|暴力|)(困难)

将序列分块,每块sqrt(n)个。 在每个块中维护f[i],to[i] f[i] 表示跳几次可以跳出所在块 to[i] 表示跳出所在块后到达的位置。 在查询时,我们O(sqrt(n))的时间进行“整块...
  • kaisa158
  • kaisa158
  • 2015-08-03 22:20
  • 532

Hnoi2010弹飞绵羊题解LCT

题目大意 给定一个序列,每个点有一个权值a[i],一只绵羊若站在点i上会被弹到第i+a[i]个点上,支持单点修改操作,求从某个点出发经过多少次会被弹飞。 题解 令每个点的父亲结点是会被弹到的结点,...
  • t14t41t
  • t14t41t
  • 2015-08-13 15:40
  • 555

超级计算机发展的前景和挑战

自1976年美国克雷公司推出了世界上首台运算速度达每秒2.5亿次的超级计算机以来,突出表现一国科技实力的超级计算机,堪称集万千宠爱于一身的高科技宠儿,在诸如天气预报、生命科学的基因分析、核业、军事、航...
  • u010470716
  • u010470716
  • 2013-05-20 22:06
  • 732

C#结合超级狗

C#结合超级狗,网上的资料少的可怜
  • PanPen120
  • PanPen120
  • 2015-03-26 14:19
  • 1939

以太坊和超级账本对比

超级帐本和以太坊智能合约对比
  • u012412689
  • u012412689
  • 2017-06-10 23:40
  • 2426

Ubuntu上使用Hadoop 2.x 一 hdfs超级用户创建和设置

在Ubuntu 12.04 server上安装 Hadoop 2.2.0
  • sheismylife
  • sheismylife
  • 2014-02-21 17:16
  • 4616

Linux 超级权限的控制

转自:http://871421448.iteye.com/blog/1614050 在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者。普通用户无法执行的操作,root...
  • qdujunjie
  • qdujunjie
  • 2015-03-19 18:29
  • 874

Hyperledger -超级账本 学习报告

Hyperledger -超级账本 学习报告   一、什么是区块链?   区块链的基本原理,基本组件包括: 交易:对账本状态的改变; 区块:记录交易和状态,是对当前账本状态的一次确认; ...
  • WHUT_007
  • WHUT_007
  • 2016-08-04 15:22
  • 6968

异或、异或和 的性质与应用

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结...
  • jerry99s
  • jerry99s
  • 2015-06-13 22:07
  • 3662
    个人资料
    • 访问:327190次
    • 积分:11634
    • 等级:
    • 排名:第1512名
    • 原创:814篇
    • 转载:4篇
    • 译文:0篇
    • 评论:201条
    最新评论
    文章分类