• 清华集训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的更多相关文章

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

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

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

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

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

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

  4. UOJ#46. 【清华集训2014】玄学

    传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...

  5. UOJ#42. 【清华集训2014】Sum 类欧几里德算法

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ42.html 题解 首先我们把式子改写一下: $$(-1)^{\lfloor a\rfloor} \\=1 ...

  6. 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\ ...

  7. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  8. BZOJ3812 清华集训2014 主旋律

    直接求出强联通生成子图的数量较难,不妨用所有生成子图的数量减去非强联通的. 非强联通生成子图在所点后满足编号最小的点所在的强联通分量不是全集. 由于$n$很小,我们可以考虑状态压缩. 对于点集$S$, ...

  9. uoj#38. 【清华集训2014】奇数国(线段树+数论)

    传送门 不难看出就是要先求区间积,再求这个区间积的\(\varphi\) 因为\(\varphi(x)=x\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\ ...

随机推荐

  1. vue2创建webpack项目build之后无法正常显示页面的问题

    最近在做vue项目的时候,项目正常运行,但是当我打包上线之后,却出现无法出现页面空白的情况,打开控制台,发现无法加载到css和js文件. 仔细观察发现路径中少了一个dis文件夹,于是我加上dist文件 ...

  2. python--006

    一.函数的作用域 1.作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 例一: name='alex' def foo(): name='lhf' def bar(): print(na ...

  3. 【Qt开发】QString与数字类型的转换(不同进制)

    把QString转换为 double类型 方法1.QString str="123.45"; double val=str.toDouble(); //val=123.45 方法2 ...

  4. 常用DOS命令及编程软件fa

    1.常用的dos命令(应用) 在接触集成开发环境之前,我们需要使用命令行窗口对Java程序进行编译和运行,所以需要知道dos命令. 打开命令行窗口的方式:win + r打开运行窗口对java程序进行编 ...

  5. [转帖] Linux 下面 perl 命令的简介

    https://www.jb51.net/article/123326.htm 感觉挺好的 改天需要仔细学习一下. 前言 本文主要给大家介绍了关于Perl单行命令的相关内容,分享出来供大家参考学习,下 ...

  6. [转帖]2017年新闻: 中国CPU还在“群雄割据” ,印度已确定了国家指令集

    中国CPU还在“群雄割据” ,印度已确定了国家指令集 时间:2017-12-21 作者:观察者网 https://www.eet-china.com/news/201712210610.html   ...

  7. HTTP协议的概念作用和特点

    Web交互的基本流程 请求:客户端根据服务器地址把数据发送给服务器的过程叫请求. 相应:服务器将请求的处理结果发送给浏览器的过程叫响应. 什么是HTTP? 概念:超文本传输协议. HTTP有什么作用? ...

  8. 2-Elasticsearch原理

    参考知乎大佬:https://zhuanlan.zhihu.com/p/62892586 一.倒排索引 倒排索引也叫反向索引,举个例子,理解一下.叫你背一首<静夜思>,立马可以背出,但是叫 ...

  9. python3小demo

    总结常用的功能小实例,快速学习并掌握python技能 1.墨迹天气 import requests from lxml.html import etree import json import tim ...

  10. multipart/form-data提交

    pip install requests-toolbelt from requests_toolbelt import MultipartEncoder import requests m = Mul ...