[Contest20180122]超级绵羊异或
题意:求$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]超级绵羊异或的更多相关文章
- JZOJ3492数数&&GDOI2018超级异或绵羊——位&&类欧几里得
JZOJ3492 数数(count) 我们知道,一个等差数列可以用三个数A,B,N表示成如下形式: B+A,B+2A,B+3A⋯B+NA ztxz16想知道对于一个给定的等差数列,把其中每一项用二进 ...
- 【Hnoi2010】Bzoj2002 Bounce & Codevs2333 弹飞绵羊
Position: http://www.lydsy.com/JudgeOnline/problem.php?id=3143 http://codevs.cn/problem/2333/ Descri ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 9071 Solved: 4652[Submi ...
- 【BZOJ2002】 [Hnoi2010]Bounce 弹飞绵羊 分块/LCT
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...
- 【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]]即为答 ...
- BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...
- [HNOI2010]BOUNCE 弹飞绵羊
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 分块
[bzoj2002][Hnoi2010]Bounce 弹飞绵羊 2014年7月30日8101 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀 ...
- 【BZOJ】2002: [Hnoi2010]Bounce 弹飞绵羊(lct)
http://www.lydsy.com/JudgeOnline/problem.php?id=2002 (BZOJ挂了,还没在BZOJ测,先是在wikioi测过了,,) 囧.在军训时立志要学lct! ...
随机推荐
- [hihocoder 1050]求树的最长链
题目链接:http://hihocoder.com/problemset/problem/1050 两种方法: 1. 两遍dfs,第一次随便找一个根,找到距离这个根最远的点,这个点必然是最长链的一端. ...
- BZOJ1202:狡猾的商人(带权并查集)
1202: [HNOI2005]狡猾的商人 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 Description: 刁姹接到一个 ...
- shell编程---变量赋值
echo $filen | awk -F. '{print $3}' 怎么把上边这行脚本产生的字串赋给一个变量啊,实际上会产生一个数, 这个变量用来存这个数.格式应该是怎么写的? a=`echo $ ...
- peity(jQuery 插件可以将元素内容转换为一个小的 <svg> 饼图,圆环图,条形图和折线图)
API地址:https://www.awesomes.cn/repo/benpickles/peity 实例效果
- java封装的使用
一:前言 其实以前我们来学习java特性的时候,对于封装好想觉得没什么用处,至少我那个时候的感觉(不知道是不是我学的太浅薄了~),现在由于项目从零开始做得,在做得过程中我感觉到原来封装是这样用的. 二 ...
- 【hdu1712】分组背包(每组最多选1个)
[分组背包] [题意]ACboy要开始选课了,上一门课能够获得的收益和他上这门课的时间是有关的,然后给你若干门课,让你帮他进行选课,每一门课自然是只能选择一个课程时长,问你如何选择,才能使ACboy获 ...
- Kuangbin带你飞 AC自动机
模板: struct Ac_Automation { int ch[MAXNNODE][SIGMA_SIZE]; int val[MAXNNODE]; int fail[MAXNNODE],last[ ...
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(1)
默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...
- ReadOnly与Enabled
txtDlrCode.ReadOnly = true; 1.当设置为只读,文本框有点击事件,点击该文本框还是可以响应点击事件 2.设置为只读,C#后台无法取得文本框的值,txtDlrCode.Text ...
- Maven介绍---POM、Dependency Management、Coordinates
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. POM(Project Object Model,对象模型): 仅仅只是一个xml配置文 ...