题目https://www.luogu.org/problemnew/show/P1147

题意:

给定一个数m,问有多少个数对$(i,j)$,使得$i$到$j$区间的所有整数之和为m。输出所有的解。

思路:

根据公式$(a,b)$中的所有数之和为$\frac{(a+b)(b-a+1)}{2}$,他等于定值$m$

经过整理我们可以发现$b^2 +b - a^2 + a = 2m$,如果我们确定了$a$,这条式子对于$b$就是递增的。

显然我们可以枚举$a$二分$b$。由于中间过程可能会爆int,所以直接就上longlong吧。

【二分】虐狗宝典学习笔记:

正确写出二分的流程是:(整数域)

1、通过分析具体问题,确定左右半段哪一个是可行区间,以及mid归属哪一半段。

2、根据分析结果,选择"$r = mid, l = mid + 1, mid = (l + r)>>1$" 和 “$l = mid, r = mid - 1, mid = (l + r + 1) >> 1$”两个配套形式之一。

3、二分终止条件是$l==r$,该值就是答案所在位置。

采用“$l = mid + 1, r = mid - 1$”或”$l = mid, r = mid$“来避免产生两种形势,但也相应地造成了丢失在$mid$上的答案、二分结束时可行区间未缩小到确切答案等问题,需要额外加以处理。

 #include<stdio.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue> #define inf 0x7f7f7f7f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; LL m; int main()
{
scanf("%lld", &m);
for(LL a = ; a <= m; a++){
LL st = a + , ed = m;
if(a + st > m)break;
while(st < ed){
LL mid = (st + ed + ) / ;
if(mid * mid - a * a + a + mid > * m){
ed = mid - ;
}
else {
st = mid;
}
}
if(st * st - a * a + a + st == * m)printf("%lld %lld\n", a, st);
} return ;
}

洛谷P1147 连续自然数和【二分】的更多相关文章

  1. 洛谷 P1147 连续自然数和

    洛谷 P1147 连续自然数和 看到dalao们的各种高深方法,本蒟蒻一个都没看懂... 于是,我来发一篇蒟蒻友好型的简单题解 #include<bits/stdc++.h> using ...

  2. 洛谷——P1147 连续自然数和

    P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...

  3. 洛谷 P1147 连续自然数和 题解

    P1147 连续自然数和 题目描述 对一个给定的自然数MM,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为MM. 例子:1998+1999+2000+2001+2002 = 100001 ...

  4. 洛谷P1147 连续自然数和 [2017年6月计划 数论01]

    P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...

  5. 洛谷P1147 连续自然数和 题解 枚举

    题目链接:https://www.luogu.com.cn/problem/P1147 题目大意: 给你一个数 \(M\) ,求有多少对连续自然数对之和为 \(M\),输出这列连续自然数对的首项和末项 ...

  6. 洛谷 P1147 连续自然数和 Label:等差数列

    题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个 ...

  7. 洛谷P1147 连续自然数和

    https://www.luogu.org/problem/P1147 #include<bits/stdc++.h> using namespace std; int main(){ i ...

  8. 洛谷 P1147 连续自然数和 (滑动窗口)

    维护一个滑动窗口即可 注意不能有m到m的区间,因为区间长度要大于1 #include<cstdio> #define _for(i, a, b) for(int i = (a); i &l ...

  9. P1147连续自然数和

    洛谷1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所 ...

随机推荐

  1. What's the difference between ConcurrentHashMap and Collections.synchronizedMap(Map)?

    来自:http://stackoverflow.com/questions/510632/whats-the-difference-between-concurrenthashmap-and-coll ...

  2. MySQL(3)-MySQL Workbench

    远程连接mysql不上,CentOS7下的防火墙关闭命令,别光看iptables的状态. # systemctl stop firewalld # systemctl mask firewalld   ...

  3. 疯狂Java学习笔记(75)-----------NIO.2第一篇

    Java 7引入了NIO.2.NIO.2是继承自NIO框架,并添加了新的功能(比如:处理软链接和硬链接的功能).这篇帖子包含三个部分,我将使用NIO.2的一些演示样例.由此向大家演示NIO.2的基本用 ...

  4. 下载fiddler证书并设置信任

    一.苹果手机 待整理 二.android手机 待整理

  5. 基于ubuntu搭建 Discuz 论坛

    系统要求:Ubuntu 16.04.1 LTS 64 位操作系统 安装 Apache2 ubuntu 需要安装 Apache2 ,使用 apt-get 安装 Apache2(安装好后,您可以通过访问实 ...

  6. Java知多少(30)多态和动态绑定

    在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例. 请大家先看一段代码: public class Demo { public static void main(String[] ar ...

  7. Java知多少(75)Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...

  8. (原)使用TortoiseGit提交代码push的时候报错:HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large

    今天我想rk的sdk包里面的一些东西提交到我的git服务器上,结果,总是报错,折腾了一下午,结果才解决. 首先看看我提交代码的时候,报错的信息: git.exe push --progress &qu ...

  9. 阿里云ECS服务器主机安装多个网站

    web|服务器|站点 Windows 2000 Server安装成功后,一般会启动一个默认的Web站点,为整个网络提供Internet服务.在中小型局域网中,服务器往往只有一台,但是一个Web站点显然 ...

  10. 弹出框插件——dialog

    基于jquery和dot.js弹出框插件,兼容IE6+等其他浏览器. 思想:弹出框元素插入body节点中,并在页面垂直居中显示(fixed定位),触发确定和关闭事件绑定. 注意ie6包含两个问题:一. ...