首页 > 其他分享 >山东大学考研机试--AcWing 3717. 整数序列

山东大学考研机试--AcWing 3717. 整数序列

时间:2023-07-09 18:11:58浏览次数:31  
标签:输出 3717 -- mid 整数 int 序列 机试 check

题目描述

很多整数可以由一连串的整数序列(至少两个数)相加而成,比如 25=3+4+5+6+7=12+13。输入一个整数 N,输出 N
的全部整数序列,如果没有则输出 NONE。

输入格式

一个整数 N。

输出格式

每行输出一个满足条件的整数序列。

序列内部元素从小到大排序。

优先输出首项更小的序列。

数据范围

2⩽N⩽1e7

输入样例

25

输出样例

3 4 5 6 7
12 13

题意分析

首先看到是将一个数拆为连续的一段序列,实际上就是求在整数的序列中求是否有一段的连续的和,此时我们就应该警觉,因为其包含使用二分法的两个关键要素:

  • 一段有序的序列(整数序列)
  • 一个查找条件(序列内各数的和为n)
    因此我们就要考虑使用二分法
    y总的二分法模板
bool check(int x) {/* ... */} // 检查x是否满足某种性质

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

所以对于这道题只需要根据从a到b的连续的大小为(a+b)/2*(b-a+1)

CODE

#include<iostream>
using namespace std;
#define int long long
const int N=1e7+10;
int n;
bool st;
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n/2;i++)
    {
        int l=i+1,r=n/2+1;
        while(l<r)
        {
            int mid=l+r>>1;
            int x=(i+mid)*(mid-i+1)/2;//二分的条件 标准的二分模板
            if(x>=n)r=mid;
            else l=mid+1;
        }
        if((i+r)*(r-i+1)/2==n)
        {
            for(int j=i;j<=r;j++)cout<<j<<' ';
            cout<<endl;
            st=1;
        }
    }
    if(!st)puts("NONE");
    
    return 0;
}

标签:输出,3717,--,mid,整数,int,序列,机试,check
From: https://www.cnblogs.com/OhLonesomeMe/p/17539088.html

相关文章

  • 【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块6
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • IDEA 使用教程
    1.查看代码历史版本若要查看特定Java类的代码历史版本,请执行以下操作:鼠标右键点击所需查看的Java类。在弹出菜单中选择"LocalHistory"(本地历史)>>"ShowHistory"(显示历史)。即可查看该类的历史版本。这在你忘记对代码进行了哪些更改或需要恢复到某个版本时非常有用。(......
  • R语言 ggplot函数中 annotate选项增加注释
     001、基础绘图ggplot(data=mtcars,aes(x=mpg,y=disp,color=factor(cyl)))+geom_point()##基础绘图 002、annotete在任意位置增加注释ggplot(data=mtcars,aes(x=mpg,y=disp,##在坐标,25,300处增加QQcolor=factor(cyl)))+geom_point......
  • ICT应用解决方案考核项目
    考核项目地址规划表设备接口地址备注ISPg0/0/01.1.1.254/24g0/0/1202.100.10.1/24g0/0/2101.100.10.1/24YX-FWg1/0/1202.100.10.2/24easy-ipg1/0/0192.168.30.2/24tunnel1192.168.50.1/24greYC-FWg1/0/1101.100.10.2/24nap......
  • 【cs50】lab7 & problem set7
    (1)lab7songssqlite3songs.db1)listthenamesofallsongsinthedatabaseSELECTnameFROMsongs;2)listnamesofallsongsinincreasingorderoftempoSELECTnameFROMsongsORDERBYtempo;3) listthenamesofthetop5longests......
  • 潮汐之航:探索海洋的故事
        潮汐的名字源自于其在海洋中周期性变化的现象。这个词来自于拉丁语"tides",意为潮水的涨落。潮汐是由地球吸引力和月球引力共同作用形成的海洋表面上的周期性涨落,使得海水随着时间而上升和下降。    潮汐作为一种自然现象,它的存在可以追溯到古代。在古代,人们......
  • 苹果Mac最好用的视频下载工具:Downie 4 for Mac v4.6.20直装版
    Downie4forMac软件下载Downie是一款Mac平台上非常实用的视频下载工具。它支持下载各种视频网站上的视频,并且具有快速、稳定、易于使用的特点。Downie支持下载各种视频网站上的视频,包括YouTube、Vimeo、Netflix、Hulu、Amazon等等。它具有快速、稳定的下载速度,可以帮助用户轻......
  • freeRTOS 10.0.1 的xQueueReceive 函数bug
    xQueueReceive读取队列后,如果再次读取消息队列并保存到同一个变量中,那么还可以读到值 读取后,再读取一次,还有值 必须要手动清除该变量,或者用一个新的指针接收,才会读到0 举例:手动清楚该变量,再读取就是0 要么就是用一个新的变量来接收,这样也可以读到0  ......
  • 创建 Code Interpreter Demo: 一次实践的探索
    好消息,好消息,CodeInterpreter可以测试使用了!!!在这篇文章中,我们将探索如何创建一个CodeInterpreterDemo。提交一个2023年1-5月份的融资记录数据,让它来帮我们分析一下这些数据。执行的过程如下:生成图表的代码我们也可以找到,需要做调整的话,可以把代码复制到本地进行修......
  • 高效刷论文的方法?论文应该怎么读
    ​ 我们不缺少论文,我们缺少的是鉴别哪些应该读。无论是泛读还是精度,海量论文总是让我们迷失双眼,Github搜索awesome有成百上千个repo,但是缺少比较和注解。我们应该去哪里找值得读的论文,我们打开pdf论文的姿势正确吗?论文应该怎么读海量论文看不够,自己萌发了分门别类写阅读笔记的......