原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ42.html

题解

首先我们把式子改写一下:

$$(-1)^{\lfloor a\rfloor} \\=1-2(\lfloor a\rfloor \bmod 2)\\=1-2(\lfloor a\rfloor -2\lfloor \frac a2 \rfloor)$$

于是问题就变成了求解:

$$f(a,b,c,n) = \sum_{i=1}^n \left\lfloor \frac {a\sqrt{r} +b}{c}i\right\rfloor$$

按照类欧几里得算法的思路,我们把他变成一个 二维坐标系中  数梯形内整点 的问题,通过不断翻转坐标系搞一搞。

首先求出 $\left\lfloor \frac {a\sqrt{r} +b}{c}\right\rfloor$ 的值,即梯形短的一个底边的长度下取整。

然后把梯形转化成一个三角形。

然后把坐标系按照直线 $y=x$ 翻转,那么斜率取倒数:

$$\frac c {a\sqrt{r} + b} = \frac{c(a\sqrt r -b)}{a^2r-b^2} = \frac {ac\sqrt r -bc}{a^2r-b^2}$$

然后像类欧一样递归下去就好了。

代码

#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof (x))
#define int long long
using namespace std;
typedef long long LL;
LL read(){
LL x=0,f=0;
char ch=getchar();
while (!isdigit(ch))
f|=ch=='-',ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
int T,n,r;
double rt;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int f(int a,int b,int c,int n){
if (!n)
return 0;
int t=gcd(a,gcd(b,c));
a/=t,b/=t,c/=t;
double k=1.0*(rt*a+b)/c;
int kk=(int)k;
k-=kk;
int m=(int)(k*n);
b-=c*kk;
return n*m+kk*(n+1)*n/2-f(a*c,-b*c,a*a*r-b*b,m);
}
signed main(){
T=read();
while (T--){
n=read(),r=read();
rt=sqrt(r);
int t=(int)rt;
if (t*t==r){
if (r&1)
puts(n&1?"-1":"0");
else
printf("%lld\n",n);
}
else
printf("%lld\n",n-2*f(1,0,1,n)+4*f(1,0,2,n));
}
return 0;
}

  

UOJ#42. 【清华集训2014】Sum 类欧几里德算法的更多相关文章

  1. BZOJ3817 清华集训2014 Sum 类欧几里得

    传送门 令\(\sqrt r = x\) 考虑将\(-1^{\lfloor d \sqrt r \rfloor}\)魔改一下 它等于\(1-2 \times (\lfloor dx \rfloor \ ...

  2. 清华集训2014 sum

    清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...

  3. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  4. UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)

    题目链接 稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度.给每个人选择配偶. 若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完 ...

  5. bzoj 3816&&uoj #41. [清华集训2014]矩阵变换

    稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...

  6. uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题

    [清华集训2014]矩阵变换 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...

  7. AC日记——【清华集训2014】奇数国 uoj 38

    #38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...

  8. [UOJ#274][清华集训2016]温暖会指引我们前行

    [UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...

  9. Luogu4433:[COCI2009-2010#1] ALADIN(类欧几里德算法)

    先套用一个线段树维护离散化之后的区间的每一段的答案 那么只要考虑怎么下面的东西即可 \[\sum_{i=1}^{n}(A\times i \ mod \ B)\] 拆开就是 \[\sum_{i=1}^ ...

随机推荐

  1. [ML]机器学习书单

    https://anvaka.github.io/greview/hands-on-ml/1/

  2. 解决Navicat远程连接MySQL出现 10060 unknow error

    前言:今天想远程连接一下自己服务器上的MySQL,用的用的软件是Navicat,服务器上的MySQL版本为5.7 第一次连接的时候就出意外了 大概意思是 无法连接MySQL服务,解决步骤如下 第一:首 ...

  3. Python【pyyaml】模块

    pyyaml模块安装: pip install pyyaml pyyaml导入: import yaml pyyaml使用: 1.使用前,在pycharm中新建一个以yaml或yml结尾的文件,保存为 ...

  4. tomcat 线程池

    web server允许的最大线程连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右. 1.编辑tomcat安装目录下的conf目录下的server. ...

  5. Promise异步操作

    Promise是es6中新增加的类(new Promise),目的为了管理JS中异步编程,也叫“Promise”设计模式 Promise用来解决异步问题.本身是同步的,只是用来管理异步编程的一种模式 ...

  6. [物理学与PDEs]第3章第2节 磁流体力学方程组 2.4 不可压情形的磁流体力学方程组

    不可压情形的磁流体力学方程组 $$\beex \bea \cfrac{\rd {\bf H}}{\rd t}-({\bf H}\cdot\n){\bf u}&=\cfrac{1}{\sigma ...

  7. excel转换为TXT文本

    #_*_ coding:utf-8 _*_#author:yr import xlrd data = xlrd.open_workbook(r"C:\Users\yangr\Desktop\ ...

  8. 第30月第6天 git log

    1. git log git log 96a6f18b1e0a1b7301cb4f350537d947afeb22bc -p -1 我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最 ...

  9. eclipse下classes文件夹无法发布到tomcat的问题--tomcat发布慢的问题

    === 解决eclipse下classes文件夹无法发布到tomcat的问题_Nautilus_新浪博客http://blog.sina.com.cn/s/blog_484d8777010130n5. ...

  10. 关于sniff函数的一个小坑

    最近在用scapy模块写一个关于WiFi的脚本时用到sniff函数,其中遇到了一个小坑,记录如下: sniff函数是在指定网卡上每次嗅探到一个数据包后然后将它传给prn指定的函数.