题意:求$a\ xor\left(a+b\right)xor\cdots xor\left(a+b\left(n-1\right)\right)$

对每一位求答案,第$k$的答案是$\sum\limits_{i=0}^{n-1}\left\lfloor\dfrac{a+bi}{2^k}\right\rfloor$,这是类欧几里得算法中的一个

类欧几里得算法:求$f\left(a,b,c,n\right)=\sum\limits_{i=0}^n\left\lfloor\dfrac{ai+b}{c}\right\rfloor$

①若$a\geq c$或$b\geq c$,我们可以把它除出来,原式$=\dfrac{n\left(n+1\right)}{2}\left\lfloor\dfrac{a}{c}\right\rfloor+\left(n+1\right)\left\lfloor\dfrac{b}{c}\right\rfloor+f(a\%c,b\%c,c,n)$

②若$a\lt c$且$b\lt c$,令$m=\left\lfloor\dfrac{an+b}{c}\right\rfloor$

原式

$\begin{align*}&=\sum\limits_{i=0}^n\sum\limits_{j=1}^m\left[\left\lfloor\dfrac{ai+b}{c}\right\rfloor\geq j\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{m-1}\left[\left\lfloor\dfrac{ai+b}{c}\right\rfloor\geq j+1\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{m-1}\left[ai+b\geq cj+c\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{m-1}\left[ai\gt cj+c-b-1\right]\\&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{m-1}\left[i\gt\left\lfloor\dfrac{cj+c-b-1}{a}\right\rfloor\right]\end{align*}$

因为$i,j$独立,所以两个求和符号可以换过来

$\begin{align*}&=\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n\left[i\gt\left\lfloor\dfrac{cj+c-b-1}{a}\right\rfloor\right]\\&=\sum\limits_{j=0}^{m-1}\left(n-\left\lfloor\dfrac{cj+c-b-1}{a}\right\rfloor\right)\\&=mn-f\left(c,c-b-1,a,m-1\right)\end{align*}$

$a,c$每次递归要么被①削成余数,要么被②交换位置,类似欧几里得算法,复杂度也是一样的

边界是$a=0$

那么我们现在可以快速求原来的式子了

本题其实就是在模$2$的意义下求答案

#include<stdio.h>
#define ll long long
ll f(ll a,ll b,ll c,ll n){
	if(a==0)return(b/c*(n+1))&1;
	if(a>=c||b>=c)return((a/c*n*(n+1)/2)&1)^((b/c*(n+1))&1)^f(a%c,b%c,c,n);
	ll m=(a*n+b)/c;
	return((n*m)&1)^f(c,c-b-1,a,m-1);
}
int main(){
	int t,i,n,a,b;
	ll ans;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&n,&a,&b);
		ans=0;
		for(i=0;i<60;i++)ans|=(f(b,a,1ll<<i,n-1)<<i);
		printf("%lld\n",ans);
	}
}

[Contest20180122]超级绵羊异或的更多相关文章

  1. JZOJ3492数数&&GDOI2018超级异或绵羊——位&&类欧几里得

    JZOJ3492 数数(count) 我们知道,一个等差数列可以用三个数A,B,N表示成如下形式:  B+A,B+2A,B+3A⋯B+NA ztxz16想知道对于一个给定的等差数列,把其中每一项用二进 ...

  2. 【Hnoi2010】Bzoj2002 Bounce & Codevs2333 弹飞绵羊

    Position: http://www.lydsy.com/JudgeOnline/problem.php?id=3143 http://codevs.cn/problem/2333/ Descri ...

  3. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 9071  Solved: 4652[Submi ...

  4. 【BZOJ2002】 [Hnoi2010]Bounce 弹飞绵羊 分块/LCT

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...

  5. 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 link-cut-tree

    2016-05-30 11:51:59 用一个next数组,记录点x的下一个点是哪个 查询时,moveroot(n+1),access(x),splay(x) ,输出size[ch[x][0]]即为答 ...

  6. BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...

  7. [HNOI2010]BOUNCE 弹飞绵羊

    题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...

  8. 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 分块

    [bzoj2002][Hnoi2010]Bounce 弹飞绵羊 2014年7月30日8101 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀 ...

  9. 【BZOJ】2002: [Hnoi2010]Bounce 弹飞绵羊(lct)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 (BZOJ挂了,还没在BZOJ测,先是在wikioi测过了,,) 囧.在军训时立志要学lct! ...

随机推荐

  1. 淡入淡出效果的js原生实现

    淡入淡出效果,在日常项目中经常用到,可惜原生JS没有类似的方法,而有时小的页面并不值得引入一个jQuery库,所以就自己写了一个,已封装, 有用得着的朋友, 可以直接使用. 代码中另附有一个设置元素透 ...

  2. POJ2391:Ombrophobic Bovines(最大流+Floyd+二分)

    Ombrophobic Bovines Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 21660Accepted: 4658 题目 ...

  3. lvm扩容

    111 mkfs -t xfs /dev/sda3 112 pvcreate /dev/sda3 113 vgs 114 vgextend cl /dev/sda3 115 lvscan 116 vg ...

  4. WITH AS 使用

    WITH AS 含义: WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让S ...

  5. Idea 部署非Maven项目

    参考:http://m.blog.csdn.net/z69183787/article/details/78030857 以前一直很好奇,在idea中运行tomcat,把项目部署到其中,运行起来,然后 ...

  6. [BZOJ1151][CTSC2007]动物园zoo 解题报告|DP|位运算

    Description 最近一直在为了学习算法而做题,这道题是初一小神犇让我看的.感觉挺不错于是写了写. 这道题如果是一条线的话我们可以构造一个DP f[i,j]表示以i为起点,i,i+1...i+4 ...

  7. NYOJ 127 星际之门(一) (数学)

    题目链接 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的 ...

  8. Hadoop简单源码样例

    1.WordCount策略比较简单 import java.io.IOException; import java.util.StringTokenizer; import org.apache.ha ...

  9. Codeforces #107 DIV2 ABCD

    A #include <map> #include <set> #include <list> #include <cmath> #include &l ...

  10. boost::function的简单实现

    前言 boost::function和boost:bind是一对强大的利器.相信用过的童鞋多少有些体会. 虽然平时在用boost::function,但是用的时候心中总会一些不安,因为不知道它是怎么实 ...