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 ...
随机推荐
- OIDC-Open ID Connect
OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0.它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准 ...
- .net core —— 控制台如何获取配置文件的内容?
本文链接:https://blog.csdn.net/yenange/article/details/82457761参考: https://github.com/liuzhenyulive/Json ...
- 大话设计模式Python实现-简单工厂模式
简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 #!/usr/ ...
- POJ 1306 暴力求组合数
Combinations Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11049 Accepted: 5013 Des ...
- golang --- fmt.printf I/O 函数格式化说明
说明 fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf格式“占位符”衍生自 C,但比 C 更简单 常用格式化输出 fmt.Printf("start at ...
- .net core启用Swagger
启用 Swagger 页面 官方文档推荐两种框架:Swashbuckle 和 NSwag,这里使用 Swashbuckle 来生成接口文档. 目录 安装包 添加服务 配置中间件 添加 UI 设置 ...
- 使用Swagger创建Api
1.首先创建一个web项目,选择Mvc模板 2.右键点击引用.管理Nuget程序包,浏览 搜索Swagger,下载安装下面的包 3.安装完后在App_Start里面会出现SwaggerConfig.c ...
- NSSM部署.Net Core到 Windows 服务
NSSM 官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 简单点理解就是NSSM可以把一些exe程序封装成Windows服务,然后exe程序 ...
- 【USACO题库】1.3.4 Prime Cryptarithm牛式
好久没有发题解了,今天发一个很久很久之前写过得题吧 题目其实莫名的难 但是理解后,原来就是一只纸老虎 题目加工中~~~~(缩短题目) 加工完成:已知数字1-9组成集合的一个子集,求满足题意乘法步骤的情 ...
- k8s时区问题解决方案
前几天在使用k8s中的CronJob时发现了一个很奇怪的问题, 按照官方文档的demo跑起来是没有任何问题的, 但是当我想要设置每天一个固定时间点例如12点20执行一个job的时候,到了时间之后无论如 ...