JZOJ3492数数&&GDOI2018超级异或绵羊——位&&类欧几里得
JZOJ3492 数数(count)
我们知道,一个等差数列可以用三个数A,B,N表示成如下形式:
B+A,B+2A,B+3A⋯B+NA
ztxz16想知道对于一个给定的等差数列,把其中每一项用二进制表示后,一共有多少位是1
A<=1e4,B<=1e16,N<=1e12
分析:
有个很经典的类欧套路,k从0开始
二进制下,第k位是否为1,等于(原数>>k)-2*(原数>>(k+1)),

可以把i从1到n变成i从0到n-1,也就是提一个A出来,再做,于是就是类欧板子题。
#include<bits/stdc++.h>
using namespace std; typedef long long ll; ll f(ll a, ll b, ll c, ll n)
{
if(!a) return (b/c)*(n+);
if(a >= c || b >= c) return (f(a%c, b%c, c, n) + n*(n+)/*(a/c) + (n+)*(b/c));
ll m = (a*n+b) / c;
return (n*m - f(c, c-b-, a, m-));
} ll a, b, n; int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%lld%lld%lld", &a, &b, &n);
ll limit = b + a*n, ans = ;
for(int mi = ; mi <= limit; mi*=) ans += f(a, a+b, mi, n-) - f(a, a+b, mi*, n-)*;
printf("%lld\n", ans);
}
return ;
}
【GDOI2018模拟8.8】超级绵羊异或
求(a) xor (a + b) xor (a + b * 2) xor … xor (a + b * (n - 1))。
对于100%的数据,t<=1e4,a, n<=1e9, b<=1e9;
分析:
还是用上面那一个套路,
写成求和形式,考虑最后第k位的奇偶,即像上题一样,判断每一位的出现次数,对每一位使用类欧。
#include<bits/stdc++.h>
using namespace std; typedef long long ll; ll f(ll a, ll b, ll c, ll n)
{
if(!a) return (b/c)*(n+);
if(a >= c || b >= c) return (f(a%c, b%c, c, n) + n*(n+)/*(a/c) + (n+)*(b/c));
ll m = (a*n+b) / c;
return (n*m - f(c, c-b-, a, m-));
} ll a, b, n; int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%lld%lld%lld", &n, &a, &b);
ll limit = a + b*(n-), ans = ;
for(int mi = ; mi <= limit; mi*=)
{
ll tmp = f(b, a, mi, n-) - f(b, a, mi*, n-)*;
ans += (tmp&)*mi;
}
printf("%lld\n", ans);
}
return ;
}
BZOJ3817
给定正整数N,R。求

分析:
继续用上面的套路,考虑幂的奇偶会对答案造成不同贡献,本质上是幂的第1位是否为1,即求 $Ans_0$.
因为底数是-1,对布尔式的贡献线性变换一下,搞成1-2*Ans0。
由于sqrt(r)是实数,不能完全当整数处理,


$\begin{align}
f(a,b,c,n) &= \left \lfloor \frac{bx+c}{a} \right \rfloor\frac{n(n+1)}{2} + \sum_{i=1}^{\left \lfloor \frac{bx+d}{a}n \right \rfloor}n-\frac{a}{bx+d}i \\
&= \left \lfloor \frac{bx+c}{a} \right \rfloor\frac{n(n+1)}{2} + \left \lfloor \frac{bx+d}{a} n \right \rfloor n - \sum_{i=1}^{\left \lfloor \frac{bx+d}{a}n \right \rfloor} \left \lfloor \frac{a}{bx+d}i \right \rfloor
\end{align}$
将后面和式里的东西分母有理化得
$f(a,b,c,n) = S-\sum_{i=1}^{\left \lfloor \frac{bx+d}{a}n \right \rfloor}\left \lfloor \frac{abx-ad}{b^2x^2-d^2}i \right \rfloor = S - f(b^2r-d^2, ab, -ad, \left \lfloor \frac{bx+d}{a}n \right \rfloor)$
于是递归求,类似于辗转相除,递归层数不超过 $log_2n$.
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
ll n, r;
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } double x;
ll f(ll a, ll b, ll c, ll n)
{
if(!n) return ;
ll t = gcd(a, gcd(b, c)); a/= t, b/=t, c/=t;
ll d = c - (ll)((b*x+c)/a)*a;
ll s = (ll)((b*x+c)/a)*(n+)*n/ + n*(ll)((b*x+d)*n/a);
return s - f(b*b*r-d*d, a*b, -a*d, (ll)((b*x+d)*n/a));
} int main()
{
int T;scanf("%d", &T);
while(T--)
{
scanf("%lld%lld", &n, &r);
x = sqrt(r);
if(x==(int)(x+0.5)) printf("%lld\n", (r&)? ((n&)? - : ) : n);
else printf("%lld\n", n+*f(,,,n)-*f(,,,n));
}
return ;
}
参考链接:
1. https://blog.csdn.net/code92007/article/details/97396823
2. https://blog.csdn.net/lych_cys/article/details/51345089
3. https://www.cnblogs.com/xiao-ju-ruo-xjr/p/7157945.html
JZOJ3492数数&&GDOI2018超级异或绵羊——位&&类欧几里得的更多相关文章
- 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地
. 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地 本文来自异数OS社区 github: https://github.com/yds086/Here ...
- 洛谷 P2646 数数zzy
P2646 数数zzy 题目描述 zzy自从数学考试连续跪掉之后,上数学课就从来不认真听了(事实上他以前也不认真听).于是他开始在草稿纸上写写画画,比如写一串奇怪的字符串.然后他决定理♂性♂愉♂悦♂一 ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
- [BZOJ 3530][Sdoi 2014]数数
阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 682 Solved: 364 Description 我们称一 ...
- COJ 0036 数数happy有多少个?
数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...
- BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...
随机推荐
- 使用ipop共享串口提高工作效率
串口登录后,点击共享连接 然后在另外一台电脑,使用Telnet打开共享的串口(两台电脑需要可以网络连接) IP地址为对端IP地址,端口号为对端设置的端口号,点击连接即可
- Springboot启动一直卡在{dataSource-1} inited
Springboot启动一直卡在{dataSource-1} inited 错误原因: 暂时未知,猜测是因为设置端点的问题 解决办法: 去除所有断点: 然后再次启动就好了. 如果还有错: 那么重新导入 ...
- [转帖]从零开始入门 K8s | 手把手带你理解 etcd
从零开始入门 K8s | 手把手带你理解 etcd https://zhuanlan.zhihu.com/p/96721097 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 KV 存储系 ...
- sentry之一:sentry安装
Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题.它主要专注于持续集成.提高效率并且提升用户体验.Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在 ...
- Java 8——Base64工具
在java 8之前如果需要使用base64编解码,必须使用三方库,如:apache的commons-codec. 但是java 8将base64编解码的工具引入进来: public class Tes ...
- 【08】Jenkins:关于发布
写在前面的话 Jenkins 对于我们用户而言,可能中间会有不同的需求,比如自动构建,接口测试,代码质量检测.但其实我们的最终目的还是打包上线.当然,各个公司的项目开发语言会不一样,但是总体而言发布方 ...
- python 练习题:接收一个或多个数并计算乘积
以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积 def product(x, y): return x * y # -*- coding: utf-8 -*- def pr ...
- mini QQ(项目一)
一个多人聊天工具(C/S结构),实现了如下功能: 一个可视化窗口,支持鼠标点击事件 注册功能,用户可以注册自己的聊天账号, 注册信息包括: 账号名(可以用姓名来替代账号,支持中文), 密码(聊天框输入 ...
- Delphi - Logs记录,函数实现MsgDsp
Logs记录-函数实现MsgDsp 大多数时候,我们不太希望消息以交互的形式出现,这个时候我们可以在窗体上放置一个Memo,然后单独开一个线程进行监视,从而实现把消息实时的显示出来,便于开发者分析. ...
- Java面试必问通信框架NIO,原理详解
NIO 流与块 通道与缓冲区 缓冲区状态变量 文件 NIO 实例 选择器 套接字 NIO 实例 内存映射文件 NIO与IO对比 Path Files NIO 新的输入/输出 (NIO) 库是在 JDK ...