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超级异或绵羊——位&&类欧几里得的更多相关文章

  1. 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地

    . 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地 本文来自异数OS社区 github: https://github.com/yds086/Here ...

  2. 洛谷 P2646 数数zzy

    P2646 数数zzy 题目描述 zzy自从数学考试连续跪掉之后,上数学课就从来不认真听了(事实上他以前也不认真听).于是他开始在草稿纸上写写画画,比如写一串奇怪的字符串.然后他决定理♂性♂愉♂悦♂一 ...

  3. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】

    Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...

  4. [BZOJ 3530][Sdoi 2014]数数

    阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...

  5. 【BZOJ】【3530】【SDOI2014】数数

    AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...

  6. BZOJ3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 188[Submit][Status] ...

  7. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 682  Solved: 364 Description 我们称一 ...

  8. COJ 0036 数数happy有多少个?

    数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...

  9. BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]

    3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...

随机推荐

  1. java-int数据的溢出

    数据的溢出: 当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时, 这个整型变量所输出的值将发生紊乱,且不是预期的运行结果. 01 //  整数值如果超出了自己所可以表示范围的最大 ...

  2. OAuth2.0 自我领悟

    grant_type 授权模式 authorization_code 标准的Server授权模式,授权码模式 password 基于用户密码的授权模式,用户密码模式 client_credential ...

  3. 2019年上-C语言程序设计-第1次blog作业

    准备工作(20分) 1.在博客园申请个人博客,以真实姓名和学号加入班级博客(链接地址) 2.关注邹欣老师博客(并寻找答案:邹欣老师是谁?是做什么的?).关注任课老师博客 3.注册登录中国大学MOOC网 ...

  4. sql server 2019 & spark

    https://cloudblogs.microsoft.com/sqlserver/2019/04/01/how-to-develop-and-submit-spark-jobs-to-sql-se ...

  5. nodejs anywhere 搭建本地静态文件服务

    一.背景 工作中有时候往往会遇到下述场景:例如需要将新打好的安装包等文件临时性的给到同事,可能还需要给到多个同事.这时,我们往往有如下几种方案: 1,一般都会有公司内部的文件系统,上传文件后将对应的地 ...

  6. FileChannel(API详解)

    1.两种获取通道的方法FileChannel.open()的方式 FileChannel channell = FileChannel.open(Paths.get("a.txt" ...

  7. aspx页面,后端通过Attributes.Add给textbox添加事件时,传参失效问题。

    测试一:------------------------------------------------------------------------------------------------ ...

  8. C#操作XML文档

    Note: '=> ' 表示返回值 参考资料:请点击这里! 1:创建Xml文档 2:写Xml文档(必须保证有根元素) XmlDocument Xd (实例化一个对象) CreateXmlDecl ...

  9. Jenkins的使用(一)

    Jenkins 介绍: Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成 变成可能.前身是Huds ...

  10. SVN服务端安装和仓库的创建

    1.安装SVN服务端 双击运行: 点击[next] 勾上复选框,点击[next] 使用默认选项,点击[next] 点击[Standard Edition]建议端口号不用443,因为Vmware占用了, ...