UOJ42. 【清华集训2014】Sum
Sol
\((-1)^a=1-2(a~mod~2)=1-2a+4\lfloor\frac{a}{2}\rfloor\)
那么原式变成 \(n-2\sum_{i=1}^{n}\lfloor d\sqrt{r}\rfloor+4\sum_{i=1}^{n}\lfloor \frac{d\sqrt{r}}{2}\rfloor\)
考虑计算这样一个东西
\]
如果 \(\sqrt{r}\) 是一个整数,直接 \(\Theta(1)\) 计算
否则
设 \(k=\frac{a*\sqrt{r}+b}{c}\)
如果 \(k\ge 1\) 那么可以把 \(k\) 的整数部分的值算出来,变成 \(0<k<1\)
如果 \(0<k<1\),即就是计算 \(y=kx\) 与 \(x=n\) 所围成三角形的整点个数
根据类欧几里得那一套理论,我们用矩形的减去左上角的三角形的
矩形的就是 \(n\lfloor nk\rfloor\)
左上角的三角形的把它关于 \(y=x\) 对称,变成求 \(y=\frac{x}{k}\) 与 \(x=\lfloor nk\rfloor\) 所围成三角形的整点个数
这样可以递归下去,\(n\) 的规模减小得很快,最后计算 \(n\le 1\) 的答案即可
为了防止精度误差,可以把 \(k\) 表示成 \(\frac{a*\sqrt{r}+b}{c}\) 将 \(a,b,c\) 存下来
每次弄走 \(gcd\) 就可以了
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, ans, r, test;
double sq;
inline ll Gcd(ll a, ll b) {
if (!a || !b) return a | b;
return !b ? a : Gcd(b, a % b);
}
inline ll Solve(ll a, ll b, ll c, ll len) {
if (!len) return 0;
register ll sk, nxt, ret, d;
d = Gcd(Gcd(a, b), c), a /= d, b /= d, c /= d;
if (len == 1) return (ll)(1.0 * (sq * a + b) / c);
register double k = 1.0 * (sq * a + b) / c;
sk = (ll)k, k -= sk, nxt = (ll)(k * len), b -= c * sk;
ret = len * nxt + sk * (len + 1) * len / 2;
return ret - Solve(a * c, -b * c, a * a * r - b * b, nxt);
}
int main() {
scanf("%d", &test);
while (test--) {
scanf("%d%d", &n, &r), sq = sqrt(r), ans = sq;
if (ans * ans == r) printf("%d\n", (ans & 1) ? ((n & 1) ? -1 : 0) : n);
else printf("%lld\n", n - 2 * Solve(1, 0, 1, n) + 4 * Solve(1, 0, 2, n));
}
return 0;
}
UOJ42. 【清华集训2014】Sum的更多相关文章
- 清华集训2014 sum
清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...
- BZOJ3817 清华集训2014 Sum 类欧几里得
传送门 令\(\sqrt r = x\) 考虑将\(-1^{\lfloor d \sqrt r \rfloor}\)魔改一下 它等于\(1-2 \times (\lfloor dx \rfloor \ ...
- uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题
[清华集训2014]矩阵变换 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...
- AC日记——【清华集训2014】奇数国 uoj 38
#38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...
- UOJ#46. 【清华集训2014】玄学
传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...
- UOJ#42. 【清华集训2014】Sum 类欧几里德算法
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ42.html 题解 首先我们把式子改写一下: $$(-1)^{\lfloor a\rfloor} \\=1 ...
- 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...
- BZOJ3812 清华集训2014 主旋律
直接求出强联通生成子图的数量较难,不妨用所有生成子图的数量减去非强联通的. 非强联通生成子图在所点后满足编号最小的点所在的强联通分量不是全集. 由于$n$很小,我们可以考虑状态压缩. 对于点集$S$, ...
- uoj#38. 【清华集训2014】奇数国(线段树+数论)
传送门 不难看出就是要先求区间积,再求这个区间积的\(\varphi\) 因为\(\varphi(x)=x\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\ ...
随机推荐
- 定期删除Azure存储账号下N天之前的数据文件-ARM
######RemoveStorageBlob*DaysOld-ARM##### <# .SYNOPSIS Remove all blob contents from one storage a ...
- Spring Boot入门教程(1)
Spring Boot入门教程(1) 本文将使用Spring Boot一步步搭建一个简单的Web项目来帮助你快速上手. 将要用到的工具 JDK 8 IntelliJ IDEA(Ultimate Edi ...
- 问题 I: 闪闪发光
[提交] [状态] [命题人:外部导入] 题目描述 一所位于云南昆明的中医药本科院校--云南中医学院. 因为报考某专业的人数骤减,正面临着停招的危机. 其中有九名少女想到一条妙计——成为偶像, 只要她 ...
- 05-树9 Huffman Codes (30 分)
In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redunda ...
- python 网络编程之socket开发和socketserver模块
一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- (7.0 version)当销售单中包含service或phantom类型的产品时,销售单不能完成的原因分析及解决方案
首先说一下service类型的产品,由于该类型的产品不需要发货,所以当在销售订单确认了后,销售单直接变成了等待开票的状态,但当开票的流程结束后,订单却还是停在销售单的状态上,该问题的解决方案是安装Ta ...
- 三、OPENERP 中的对象关系类型
OE中的对象关系一共分四种,one2one,one2many,many2one,many2many.他们的意思分别是一对一,一对多,多对一以及多对多. 我们新建一个模块来测试这四种类型 1.one2o ...
- webpack原理探究 && 打包优化
在做vue项目和react项目时,都用到了webpack.webpack帮助我们很好地提高了工作效率,但是一直以来没有对其原理进行探究,略有遗憾. 因为使用一个工具,能够深入了解其原理才能更好地使用. ...
- centos 7编译安装Python3.6.1
1.准备必要的库文件 yum install -y gcc zlib-devel openssl-devel sqlite-devel 2.进入源代码包 ./configure prefix=/usr ...
- 一次邮件发送协议SMTP问题排查
项目中需要用到smtp协议来发送邮件告警,后端的技术栈主要是Java和C++,Java项目里直接在网上找的现成的类完美实现,163邮箱,腾讯邮箱和阿里邮箱均测试通过,不幸的是C++的项目也需要使用sm ...