清华集训2014 sum
- 清华集训2014sum
- 求$$∑_{i=1}{n}(-1){⌊i√r⌋}$$
- 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\)。
- 吼题解啊
- 具体已经讲得很详细了(找了好久才找到的良心题解。)
- 首先看到向下取整的式子要会拆开。
- 然后套类欧几里德。
- 这里的类欧几里德比较简单,因为可以看作是\(y=kx\)的正比例的向下整点。
- 如果\(k>1\),那么就相当与直接算上面的点,然后把直线砍到\(k\leq 1\)。
- 否则取反函数,相当于减小了\(n\)而增大了\(k\)。
- 这样每次一定会缩小一半的问题规模,复杂度是\(O(logn)\)的。
#include<bits/stdc++.h>
#define R register int
#define ll long long
#define db double
using namespace std;
int T;ll n,r,ans,t;db q;
int gi(){
R x=0,k=1;char c=getchar();
while(c!='-'&&(c<'0'||c>'9'))c=getchar();
if(c=='-')k=-1,c=getchar();
while(c<='9'&&c>='0')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
ll Gcd(ll x,ll y){return y?Gcd(y,x%y):x;}
ll sol(ll a,ll b,ll c,ll n){
if(n==1)return (a*q+b)/c;
if(n==0)return 0;
ll gcd=Gcd(a,Gcd(b,c));
a/=gcd,b/=gcd,c/=gcd;
ll k=(a*q+b)/c;
if(k==0){
ll m=((a*q+b)/c*n);
return m*n-sol(a*c,-b*c,a*a*r-b*b,m);
}
else return k*(n*(n+1)/2)+sol(a,b-c*k,c,n);
}
void cheat(){
if(!(t&1))printf("%lld\n",n);
else if(n&1)puts("-1");
else puts("0");
}
int main(){
T=gi();
while(T--){
n=gi(),r=gi(),q=sqrt(r),t=q;
if(t*t==r){cheat();continue;}
ans=n+4ll*sol(1,0,2,n)-2ll*sol(1,0,1,n);
printf("%lld\n",ans);
}
return 0;
}
清华集训2014 sum的更多相关文章
- 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 ...
- 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\ ...
- 【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}\ ...
随机推荐
- redhat下配置SEED DVS6446开发环境1
Linux NFS服务详解 1.什么是NFS(Network FileSystem) NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 所发展出来的.他最大的 功 ...
- Selenium 2自动化测试实战12(获得验证信息)
一.获得验证信息 通常用的最多的几种验证信息分别是:title.URL和text 运行脚本之后,结果如下图所示: #coding:utf-8 from selenium import webdrive ...
- C# 获取当前活动网络连接mac地址
IPAddress localIp = null; IPAddress[] ipArray; ipArray = Dns.GetHostAddresses(Dns.GetHostName()); lo ...
- Spring 中如何自动创建代理(spring中的三种自动代理创建器)
Spring 提供了自动代理机制,可以让容器自动生成代理,从而把开发人员从繁琐的配置中解脱出来 . 具体是使用 BeanPostProcessor 来实现这项功能. 这三种自动代理创建器 为:Bean ...
- goland搭建beego开发环境
1.安装最新的go软件 ,当前版本1.122.下载goland开发工具3.安装bee工具 go get github.com/beego/bee4.通过bee api dsh -tables=&quo ...
- eclipse 包含头文件出错
最近这段时间自己在写游戏的框架,在做的过程中遇到了一个问题:没办法#include <iostream>,在eclipse下F3也找不到对应的 iostream 文件, 最后在晚上找资料, ...
- python 进程和串行(——)
进程 1.什么是串行? 串行:就是一个程序完完整整的运行完了,下个程序才运行. 2.什么是进程? 进程:一个正在运行的程序或一个程序运行的过程. 为什么要用进程. 提高程序执行效率. 多道技术:并发技 ...
- CDH的ntp时间同步
云服务器: ntpq -p ntpdate -u 10.52.255.1 #手动同步 自建NTP服务器: https://www.cnblogs.com/yinzhengjie/p/9480665. ...
- 简单而粗暴的方法画任意阶数Bezier曲线
简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...
- c++ try_throw_catch异常处理
参考https://www.cnblogs.com/xiaojianliu/articles/8900795.html 在程序设计时,针对不同的异常情况,预先设定异常信息,在程序运行时,根据异常提示信 ...