BZOJ3817 Sum(类欧几里得算法)
设$t=\sqrt r$,原题转化为$\sum_{x=1}^n(4*\lfloor\frac{tx}2\rfloor-2*\lfloor tx\rfloor+1)$
考虑如何求$\sum_{x=1}^n\lfloor\frac{bt+c}ax\rfloor$
开始我写了一个真欧几里得来求直线下整点数目,然后由于里头含小数所以不对。
于是学习了一下新姿势,思想其实差不多。
先把a,b,c同时除以gcd(a,b,c),防止爆int。
之后把斜率变成$\frac{bt+c}a-\lfloor\frac{bt+c}a\rfloor$,并计算对应贡献。
第三步把x,y轴互换,这时斜率变成了倒数,即$\frac a{bt+c}=\frac {abt-ac}{b^2t^2-c^2}$
特判r是完全平方数的时刻,因为这样直线上会有点,所以减的时候会减多。
补充:真欧几里得算法:
$$\sum_{0<=x<n} \lfloor \frac{ax+b}{c} \rfloor=n*\lfloor \frac{b}{c} \rfloor+\frac{n*(n-1)}{2}*\lfloor \frac{a}{c} \rfloor+\sum_{0<=x<\lfloor \frac{(a\%c)*n+b\%c\quad}{c} \rfloor} \lfloor \frac{cx+(an+b)\%c}{a\%c} \rfloor$$
#include <cstdio>
#include <cmath> int T,n,r;
double t;
int gcd(int a,int b) {return b?gcd(b,a%b):a;}
int sol(int n,int a,int b,int c) {
if (!n) return ;
int tmp=gcd(gcd(a,b),c); a/=tmp; b/=tmp; c/=tmp;
tmp=(t*b+c)/a; int sum=1ll*n*(n+)*tmp>>;
c-=tmp*a; tmp=(t*b+c)*n/a;
return sum+n*tmp-sol(tmp,b*b*r-c*c,a*b,-a*c);
} int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&r),t=sqrt(r);
if((int)t==t) printf("%d\n",(r&)?((n&)?-:):n);
else printf("%d\n",n+*sol(n,,,)-*sol(n,,,));
}
return ;
}
BZOJ3817 Sum(类欧几里得算法)的更多相关文章
- LOJ138 类欧几里得算法
类欧几里得算法 给出 \(T\) 组询问,每组用 \(n, a, b, c, k_1, k_2\) 来描述.对于每组询问,请你求出 \[ \sum_{x = 0} ^ {n} x ^ {k_1} {\ ...
- [P5170] 类欧几里得算法
"类欧几里得算法"第二题 P5170 [题意]已知\(n,a,b,c\),求 \[ \begin{aligned} f_{1}(a,b,c,n)&=\sum_{i=0}^n ...
- Solution -「Luogu 5170」类欧几里得算法
推柿子大赛了属于是. 题目要求三个柿子,不妨分别记为: \[\begin {align} f (a, b, c, n) &= \sum \limits _{i = 0} ^{n} \lfloo ...
- Solution -「LOJ #138」「模板」类欧几里得算法
\(\mathcal{Description}\) Link. \(T\) 组询问,每次给出 \(n,a,b,c,k_1,k_2\),求 \[\sum_{x=0}^nx^{k_1}\left\ ...
- Luogu 5170 【模板】类欧几里得算法
原理不难但是写起来非常复杂的东西. 我觉得讲得非常好懂的博客. 传送门 我们设 $$f(a, b, c, n) = \sum_{i = 0}^{n}\left \lfloor \frac{ai + ...
- [BZOJ2987]Earthquake:类欧几里得算法
分析 类欧的式子到底是谁推的啊怎么这么神仙啊orz! 简单说一下这道题,题目中的约束条件可以转化为: \[ y \leq \frac{c-ax}{b} \] 有负数怎么办啊?转化一下: \[ y \l ...
- 洛谷P5170 【模板】类欧几里得算法(数论)
传送门 此题剧毒,公式恐惧症患者请直接转去代码→_→ 前置芝士 基本数论芝士 题解 本题就是要我们求三个函数的值 \[f(a,b,c,n)=\sum_{i=0}^n \left\lfloor\frac ...
- [BZOJ3817]Sum
[BZOJ3817]Sum 试题描述 给定正整数N,R.求 输入 第一行一个数 T,表示有 T 组测试数据. 接下来 T 行,每行两个正整数 n,r. 输出 输出 T 行,每行一个整数表示答案. 输入 ...
- 【LuoguP4433】[COCI2009-2010#1] ALADIN(含类欧几里得算法推导)
题目链接 题意简述 区间赋值模意义下等差数列,询问区间和 \(N\leq 10^9,Q\leq 10^5\) Sol 每次操作就是把操作区间\([L,R]\)中的数赋值成: \[(X-L+1)*A\ ...
随机推荐
- 第四十八条:如果需要精确的答案,请避免使用float和double
让一个float或者double精确的表示0.1或者10的任何负数次方值都是不可能.float和double它们执行二进制浮点运算, 它们是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的 ...
- SSM框架中前端页面(AJAX+Jquery+spring mvc+bootstrap)
前端新增页面的模态框,采用bootstarp建立.定义了empName,email,gender,depatName,四个属性的ID:其中保存按钮的ID:emp_save_btn,对应的点击函数如下: ...
- jupyter notebook下python2和python3共存(Ubuntu)
提示NOTICE 时间:2018/04/06 主题:Ubuntu 下CAFFE框架 主角:Jupyter Notebook 简介: Jupyter Notebook(此前被称为 IPython not ...
- 泛型的 typeof
static void Main(string[] args) { TestTypeOf<string>(); Console.ReadKey(); } static void TestT ...
- ajax中设置contentType: “application/json”的作用
最近在做项目交互的时候,刚开始向后台传递数据返回415,后来百度添加了 contentType:"application/json"之后返回400,然后把传输的数据格式改为json ...
- 搭建ssm框架,可实现登录和数据展示以及增删改查
需求: 后台使用ssm(spring-springMVC-mybatis)进行整合 前台使用bootstrap框架 前后台交互使用Ajax进行发送 表结构: 登录页面后显示所有用户信息,可对每条进行增 ...
- java线程池01-ThreadPoolExecutor构造方法参数的使用规则
为了更好的使用多线程,JDK提供了线程池供开发人员使用,目的在于减少线程的创建和销毁次数,以此达到线程的重复利用. 其中ThreadPoolExecutor是线程池中最核心的一个类,我们先简单看一下这 ...
- C# 客户端程序调用外部程序的三种实现
简介 我们用C#来开发客户端程序的时候,总会不可避免的需要调用外部程序或者访问网站,本篇博客介绍了三种调用外部应用的方法,供参考 实现 第一种是利用shell32.dll,实现ShellExecute ...
- webservice面试题
webservice是什么? 1.基于WEB的服务,服务端整出一些资源让客户端应用访问(提供数据) 2.webservice是一个跨语言跨平台的规范(抽象) 3.是多个跨语言跨平台的应用间通信整合的方 ...
- [洛谷P3383][模板]线性筛素数-欧拉筛法
Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的 ...