首页 > 其他分享 >2024-10-31每日一题

2024-10-31每日一题

时间:2024-10-31 11:34:51浏览次数:6  
标签:二分 10 return 边界 int 31 mid 2024 正整数

连续自然数和

题目描述

对一个给定的正整数 \(M\),求出所有的连续的正整数段(每一段至少有两个数),这些连续的自然数段中的全部数之和为 \(M\)。

例子:\(1998+1999+2000+2001+2002 = 10000\),所以从 \(1998\) 到 \(2002\) 的一个自然数段为 \(M=10000\) 的一个解。

输入格式

包含一个整数的单独一行给出 \(M\) 的值(\(10 \le M \le 2,000,000\))。

输出格式

每行两个正整数,给出一个满足条件的连续正整数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。

样例输入

10000

样例输出

18 142 
297 328 
388 412 
1998 2002

思路

做法有很多,其中比较容易想到的是以二分为基础的做法(还不会二分的同学建议速速学习,不管会不会都建议背一下二分模板

对于每组解,都是由左右边界构成的(形如\([L, R]\),L为左边界,R为右边界)我们可以从1~n枚举每一个L和R,用前缀和或者高斯定理进行求和看看是否为n(实际上L、R必然≤n/2,范围可以缩小),但这样时间复杂度就到了\(O(n^2)\),会超时。

所以我们要用二分进行优化,我们枚举每个L,对于每个L,最多存在一个R使得\([L, R]\)之和为n,我们可以对R进行二分查找(用\([L,R]\)之和与n的大小关系作为判断条件),求\([L,R]\)之和可以用前缀和、高斯定理((首项+末项)×项数÷2)等方法。

附赠二分板子

bool check(int mid) {
    if(...)return 1;
    else return 0;
}
.....
.....
int l=L,r=R,mid;//L为下边界,R为上边界
while(l<r) {
    mid=(l+r)/2;
    if(check(mid)) r=mid;
    else l=mid+1;
}
.....
.....
-----------------------------------------------------------------------------
//check(mid)返回1表示满足条件,返回0就是不满足条件,不管返回什么,每次check以后mid的取值区间都会收缩,最终收拢到最终答案,例如在这一题里面,check(mid)写成函数就是
bool check(int mid) {
    if((i+i+mid)*(mid+1)/2>=n)return 1;
    else return 0;
}

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n;
signed main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n/2;i++) {
        int l=1,r=n,mid;
        while(l<r) {
            mid=(l+r)/2;
            if((i+i+mid)*(mid+1)/2==n) {
                printf("%lld %lld\n",i,i+mid);
                break;
            } else if((i+i+mid)*mid/2>n) {
                r=mid;
            } else {
                l=mid+1;
            }
        }
    }
    return 0;
}

标签:二分,10,return,边界,int,31,mid,2024,正整数
From: https://www.cnblogs.com/Sonatto/p/18517354

相关文章

  • 20222311 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实践内容(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C+shellcode编程(2)通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,不要截图。与......
  • 【20241030】【Python基础教程】第二章 列表和元组 I
    第二章列表和元组I2.1序列概述数据结构是以某种方式(如通过编号)组合起来的数据元素(如数、字符乃至其他数据结构)集合元组是特殊的序列,列表和元组的主要不同在于,列表是可以修改的,而元组不可以。几乎在所有情况下都可使用列表来代替元组。一种例外情况是将元组用作字典键。序......
  • 最新EI会议论文投稿指南:10个热门学术会议推荐
    在学术界,EI会议论文的发表是衡量研究成果质量与国际影响力的重要指标之一。本文旨在为科研工作者提供最新的EI会议论文投稿指南,并推荐10个热门的EI会议,帮助大家更有效地展示研究成果,提升个人及团队的学术地位。一、EI会议论文投稿基础指南1.选题与撰写首先,选择具有创新性、......
  • 2024最新黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    想要成为黑客,却苦于没有方向,不知道从何学起,下面这篇黑客入门教程可以帮你实现自己的黑客梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后1、Web安全相关概念(2周)·熟悉基本概念(SQL注入、上传、XSS、、CSRF、一句话木马等)。通过关键字(SOL注入、上传、XSSC......
  • Delphi10.3下SimpleGraph v2.92的安装,使用
     下载 通过百度网盘分享的文件:simple-graph-master.zip链接:https://pan.baidu.com/s/19KHlGaitim21qcgXHl_HgQ提取码:n3zq安装将C:\Users\Administrator\Downloads\simple-graph-master\simple-graph-master\Source加入到第一步:点击“File”-“New”菜单中的“Packag......
  • 日常学习(10.30)
    IOC与AOP    在学习Spring时,初次接触到IOC与AOP,他们是Spring框架的核心技术。                IOC(控制反转)是一种设计思想,用于实现对象之间的解耦和依赖管理。它通过将对象的创建和依赖关系的管理从应用代码中抽离出来,交给外部容器来处理,从而降低了......
  • 第四届智能电力与系统国际学术会议(ICIPS 2024)
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍四、出席嘉宾五、征稿主题......
  • 2024年信号处理与神经网络应用国际学术会议(SPNNA 2024) 2024 International Conferenc
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍2024年信号处理与神经网络应用国际学术会议(SPNNA2024)将于2024年12月13日......
  • # 20222322 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1实验内容(1)使用msfvenom和msf编码器生成文件使用msfvenom生成exe文件,并进行编码。生成jar文件,用于Java环境下的攻击。生成PHP文件,用于Web服务器上的攻击。(2)使用Veil工具生成恶意代码下载并安装Veil-Evasion,使用Veil生成恶意代码。(3)使用C+shellco......
  • 2024_10_30_2_hyperNeat进化神经网络算法
    原文地址:HyperNEATExplained:AdvancingNeuroevolutionExpandingNeuroEvolutionLastweek,IwroteanarticleaboutNEAT(NeuroEvolutionofAugmentingTopologies)andwediscussedalotofthecoolthingsthatsurroundedthealgorithm.Wealsobrieflytouc......