【信息奥赛题解】四平方和(详细分析题解 & C++ 代码)

2023-05-16

📚 四平方和

摊主的个人技术博客:https://rickyxcoder.top/ 🧑🏻‍💻
备用站点:https://rickyxcoder.gitee.io/

🚀 题目浏览

【题目名称】四平方和
【题目描述】

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多 4 4 4 个正整数的平方和。

如果把 0 0 0 包括进去,就正好可以表示为 4 4 4 个数的平方和。

比如:

5 = 0 2 + 0 2 + 1 2 + 2 2 5=0^2+0^2+1^2+2^2 5=02+02+12+22
7 = 1 2 + 1 2 + 1 2 + 2 2 7=1^2+1^2+1^2+2^2 7=12+12+12+22

对于一个给定的正整数,可能存在多种平方和的表示法。

要求你对 4 4 4 个数排序:

0 ≤ a ≤ b ≤ c ≤ d 0 \le a \le b \le c \le d 0abcd

并对所有的可能表示法按 a , b , c , d a,b,c,d a,b,c,d 为联合主键升序排列,最后输出第一个表示法。

【输入】

输入一个正整数 N N N

【输出】

输出 4 4 4 个非负整数,按从小到大排序,中间用空格分开。

【数据范围】

0 < N < 5 ∗ 1 0 6 0 \lt N \lt 5∗10^6 0<N<5106

【输入样例】
5
【输出样例】
0 0 1 2
【原题链接】

https://www.luogu.com.cn/problem/P8635


☘️ 题解分析

四重循环的暴力枚举做法,显然会 TLE,所以可以采用 哈希 的方法,来降低时间复杂度。

正确思路

  • c c c d d d 的平方和存储到自己模拟的哈希表中,该步复杂度为 O ( n ) ∗ O ( n ) = O ( n ) O(\sqrt n) * O(\sqrt n) = O(n) O(n )O(n )=O(n)
  • 枚举 a , b a,b ab,并且在哈希表中查找 n − a ∗ a − b ∗ b n - a * a - b * b naabb,该步复杂度为 ( O n ) ∗ O ( n ) ∗ O ( 1 ) = O ( n ) (O\sqrt n) * O(\sqrt n) * O(1) = O(n) (On )O(n )O(1)=O(n)

所以该思路的时间复杂度为 O ( n ) + O ( n ) = O ( n ) O(n) + O(n) = O(n) O(n)+O(n)=O(n),满足该题的数据范围。

本题推荐使用自己 用数组模拟的哈希表(相较于 STL 会更加快)


🧑🏻‍💻 C++ 代码

#include<bits/stdc++.h>

using namespace std;
const int N = 5e6 + 10;

int n;
int C[N], D[N];  // 哈希表,C[k]存储平方和为k时,c的值;D[k]存储平方和为k时,d的值

int main() {
    cin >> n;

    // 将c、d的平方和存入哈希表(复杂度为O(N)))
    memset(C, -1, sizeof(C)); // 初始化为-1,因为0是有实际含义的
    memset(D, -1, sizeof(D));
    for (int c = 0; c * c <= n; c++) {
        for (int d = c; c * c + d * d <= n; d++) {
            int sum = c * c + d * d;
            if (C[sum] == -1)  // 该总和第一次出现,记录此时c和d的值
                C[sum] = c, D[sum] = d;
        }
    }

    // 枚举a,b,查找 n - a*a - b*b 的哈希值
    // 哈希值存在,说明此时a,b,c,d平方和为n
    // 复杂度是sqrt(n) * sqrt(n) * O(1)= O(n) 哈希表查找为O(1)
    for (int a = 0; a * a <= n; a++) {
        for (int b = a; a * a + b * b <= n; b++) {
            int dis = n - a * a - b * b;
            if (C[dis] > -1) {
                cout << a << " " << b << " " << C[dis] << " " << D[dis] << endl;
                return 0;  // 下面没有更多需求的话,直接return 0结束即可,不用写goto
            }
        }
    }

    return 0;
}

✍️ 写在最后

如果小伙伴们觉得博主写的不错,可以给文章点个赞,让优质的文章有更大的概率出现在搜索榜单的前面,为未来的小伙伴们节约更多搜索、阅读的成本。

同时你的支持也是我不断创作的动力。😃

有想要看更多题解报告的小伙伴,也可以关注我的专栏「信息奥赛题解」。

我们下期再见。👋


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【信息奥赛题解】四平方和(详细分析题解 & C++ 代码) 的相关文章

  • 激光雷达RPLIDAR A1使用教程

    激光雷达RPLIDAR A1使用教程 一 雷达硬件连接 1 A1雷达包含组件 RPLIDAR A1开发套装包含了如下组件 xff1a o RPLIDAR A1模组 xff08 内置 PWM电机驱动器 xff09 o USB适配器 o RPL
  • 4G远程小车1-树莓派读取WTGPS+BD模块

    树莓派python读取WTGPS 43 BD模块 WTGPS 43 BD模块 模块可以通过type C线连接 xff08 自带ch430芯片 xff09 USB口 xff1b 也可以通过串口与硬件串口号相连接 IPX天线接头为IPX1代 连
  • 3.ROS&PX4--PX4环境部署

    部署PX4 amp ROS开发环境 1 安装mavros Noetic版本 span class token function sudo span span class token function apt get span span cl
  • 4.ROS&PX4--运行官方offboard起飞程序

    1 创建空间 span class token function mkdir span catkin ws span class token builtin class name cd span catkin ws span class t
  • 5.ROS&PX4--offboard模式多航点代码编写

    4 ROS amp PX4 offboard模式多航点代码编写 offboard模式多航点代码编写等待更新 offboard模式多航点代码编写 等待更新 span class token comment 64 file offb node
  • Canal安装和配置,实现监听binlog日志

    1 下载canal Release v1 1 5 alibaba canal GitHub 2 直接解压 windows和linux下都是一样 3 conf example目录下 xff0c 编辑instance propertities
  • 看论文需要用到的一些专业词汇【SOTA,Benchmark,Baseline】

    看论文需要用到的一些专业词汇 SOTA Benchmark Baseline 1 SOTA2 Benchmark xff08 基准 xff09 Baseline 基线 1 SOTA SOTA实际上就是State of the arts 的缩
  • STM32中断-外部中断

    STM32中断 外部中断配置 外部中断配置 1 配置向量中断控制器NVIC xff0c 设置中断优先级 a 配置优先级组别 b 配置相关结构体参数 中断源 抢占优先级 子优先级 c 使用函数写入参数 代码参考如下 span class to
  • Ubuntu20 网络助手无法运行

    最近开始正式啃python高级教程 xff0c 遇到第一个问题 xff0c Ubuntu20版本下 xff0c 网络助手安装后 xff0c 点击开启无反应 经过好几天晚上的折腾 xff0c 终于搞定 xff0c 贴下解决过程 Step1 终
  • 通过服务器搭建一个短视频系统(含推荐算法)

    一 前端开发 前端使用的是uni app框架 xff0c 用到的开发软件是HBuiderx xff0c 前端界面如下所示 xff1a 主要包括五大功能 xff0c 一是热门视频展示 xff08 用到了热门视频推荐算法 xff09 个人推荐视
  • 【已解决】error: ‘CV_GRAY2BGR’ was not declared in this scope

    这是运行高翔 slambook2 代码出现的问题 xff0c 有两种方法解决 error CV GRAY2BGR was not declared in this scope home diyu slambook2 ch8 optical
  • 镜像备份工具rsync

    文章目录 1 概述2 rsync的认证协议3 rsync命令详解4 rsync 43 inotify 1 概述 什么是rsync xff1f rsync 即 Remote Sync 是linux系统下的数据镜像备份工具 使用rsync可以远
  • 系统调用的理解

    文章目录 系统调用什么是系统调用系统调用的分类系统调用与库函数的区别 系统调用 什么是系统调用 什么是系统调用 xff1f 答 操作系统的接口函数是连接应用软件与操作系统的中间桥梁 xff0c 系统调用其实就是操作系统提供给应用程序的接口函
  • ROS与C++入门教程(记录步骤)(一)

    ROS与C 43 43 入门教程 xff08 记录步骤 xff09 0 记录学习生活1 构建工作空间1 1 建立工作空间1 2 设置成自动加载环境 2 构建Catkin包2 1 构建2 2 查看程序包依赖关系2 3 解读package xm
  • C语言:全局变量在多个c文件中公用的方法

    用C语言编写程序的时候 xff0c 我们经常会遇到这样一种情况 xff1a 希望在头文件中定义一个全局变量 xff0c 然后包含到两个不同的c文件中 xff0c 希望这个全局变量能在两个文件中共用 举例说明 xff1a 项目文件夹proje
  • 迭代器(iterator)看这篇就够了

    文章目录 前言一 迭代器是什么二 迭代器如何使用2 1 迭代器正常遍历集合2 2 完全版迭代器可以一边遍历一边删除元素2 3 简易版迭代器 总结 前言 迭代器很重要 xff0c 是遍历线性数据结构 xff08 链表 xff09 的重要方法之
  • Jquery 获取元素属性值

    获取属性 获取内置属性获取自定义属性prop value name value attr value name value jquery中内置属性只能用来获取内置 自定义只能用来获取内置 内置属性 span class token func
  • 使用evo测评工具测评性能

    防止健忘 参考EVO工具github链接 xff1a link1 开源室内激光场景数据 xff1a link2 总体来说 xff0c evo是用于处理 评估和比较里程计和SLAM算法的轨迹输出 支持的轨迹文件格式 xff1a Tum文件Ki
  • DNS内网欺骗(仅供参考)

    DNS内网欺骗 仅供参考 下面展示一些 内联代码片 span class token comment 启动apche2 span systemctl start apache2 在 span class token operator spa
  • linux下安装nodejs(附带安装npm)

    一 下载nodejs的二进制文件 附官网链接 xff1a 下载 Node js 右键 xff0c 复制下载链接地址 二 安装解压 mkdir boke cd boke wget https nodejs org dist v16 13 2

随机推荐

  • stm32F103C8T6核心板 使用ST-Link无法烧写程序的解决方案

    stm32F103C8T6核心板 使用ST Link无法烧写程序的解决方案 本人也是小白一名 希望我的回答能对你有所帮助 以下是我遇到的问题 1 首先是插入连接线 电脑显示如图 网上找了很久还没有找到解决方案 不过不影响烧写 其次是FlyM
  • 【无标题】

    stm32最小核心板串口通讯连接方式 首先需要一个含有CH430的usb转ttl模块 3 3v接板子上的3 3v GND接板子上的GND 注意 不要接反了 接反的话usb转ttl模块不会亮 如果接反了并且usb转ttl模块插到电脑上 板子会
  • selenium 滑块问题解决

    滑块问题解决 问题解决分为两步 图片处理 滑块移动处理 图片处理 1 图片获取 这里获取的是背景以及滑块图片 获取图片 通过requests get 将图片下载到本地 with open 39 yuan image html 39 39 r
  • VisionPro 9.0 安装完,没有在Visual Studio 2019工具箱中上显示控件

    VisionPro 9 0 安装完 没有在Visual Studio 2019工具箱中上显示控件 步骤 右键工具箱 然后点击 选择项 然后点击浏览选项 3 目录位置 C Program Files x86 Cognex VisionPro
  • visionPro通过网线连接海康相机踩过的坑

    visionPro通过网线连接海康相机踩过的坑 1 搞了两三天 xff0c 笔者用的是笔记本是小新 xff0c 没有网口 xff0c 通过USB转网口连接摄像头 xff0c 明确的告诉你不行 xff0c USB即使达到所谓的千兆 xff0c
  • 完成select的TCP客户端

    include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt include lt netinet
  • vins概述

    基本框架如上 xff0c VINS的功能模块可包括五个部分 xff1a 数据预处理 初始化 后端非线性优化 闭环检测及闭环优化 代码中主要开启了四个线程 xff0c 分别是 xff1a 前端图像跟踪 后端非线性优化 xff08 其中初始化和
  • 软件项目管理总结(全)

    软件项目管理知识综述 第一章知识总结 软件项目管理的作用和重要性 项目管理就是将知识 技能 工具与技术应用于项目活动 xff0c 以满足项目的要求 项目管理通过合理 运用与整合特定项目所需的项目管理过程得以实现 项目管理使组织能够有效且高效
  • FreeRTOS 的任务调度方式和具体任务是怎么切换的

    FreeRTOS操作系统主要是两种任务调度方式 xff1a 抢占式调度 每个任务都有不同的优先级 xff0c 任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数 xff0c 比如 vTaskDelay 时间片调度 每个任务都
  • linux/UNIX中如何使用fork函数调用exec函数族,实现子进程做特定操作

    前言 在 Unix Linux 操作系统中 xff0c 进程是一种非常重要的概念 进程是程序执行的实例 xff0c 操作系统会为每个进程分配资源 xff0c 进程之间相互独立 xff0c 可以进行通信 在 Unix Linux 中 xff0
  • Opencv学习----矩阵操作-基本操作

    5 1 基本操作 cv absdiff InputArray src1 InputArray src2 OutputArray dst 计算两个数组之间或数组与标量之间的每元素绝对差值 注意 当阵列具有深度CV 32S时 xff0c 不应用
  • 【Linux】实验报告2 Linux基础命令

    作者 xff5c Ricky 水果摊 时间 xff5c 2022年6月27日 文章目录 实验目的实验原理1 Linux文件系统2 Linux存储位置常用命令存放位置头文件存放位置 3 Linux常用命令路径目录文件 实验内容1 Linux常
  • 【Linux】实验报告3 vi、gcc 和 gdb 的使用

    实验三 编辑器 vi 编译器 gcc 和调试器 gdb 的使用 文章目录 实验三 编辑器 vi 编译器 gcc 和调试器 gdb 的使用实验目的实验原理1 vi和vim简介1 1 vi1 2 vim 2 vi的三种工作模式2 1 命令模式
  • 【Linux】实验报告8 Linux文件系统

    作者 xff5c Ricky的水果摊 时间 xff5c 2022年7月6日 文章目录 实验目的实验内容1 文件信息命令2 基本的命令行文件管理3 文件系统权限操作 实验目的 使用 控制字符 执行特殊功能 xff1b 使用 file 和 st
  • 【Java】学习日记 Day16

    作者 xff5c Ricky 水果摊 时间 xff5c 2022年7月21日 x1f308 今日知识点总结 方法重载 xff08 Overload xff09 1 方法重载的定义 方法重载 是指 Java 允许在同一个类中 xff0c 定义
  • 【信息奥赛题解】昆虫繁殖(详细分析题解 & C++ 代码)

    昆虫繁殖问题 x1f31f 题目名称 昆虫繁殖 题目描述 科学家在热带森林中发现了一种特殊的昆虫 xff0c 这种昆虫的繁殖能力很强 每对成虫过 X X X 个月后开始产卵 xff0c 每月产 Y Y
  • 【期末指北】嵌入式系统——选择题(feat. ChatGPT)

    作者 xff5c Ricky 水果摊 时间 xff5c 2023年2月20日 基本信息 本博客摘录了一些 嵌入式系统 的 常见选择题 xff0c 供有需求的同学们学习使用 部分答案解析由 ChatGPT 生成 xff0c 博主进行审核 使用
  • GPT-4 终问世!旧王已死,新王当立!面对AI,人类真的准备好了吗?

    GPT 4 终问世 xff01 旧王已死 xff0c 新王当立 xff01 面对AI xff0c 人类真的准备好了吗 xff1f 摊主一大早醒来 xff0c 就看见 GPT 4 发布的消息 xff0c 不得不感慨今年 AI 更新的速度真是太
  • 【Linux】如何在 Ubuntu 上安装 Clang 编译器

    Linux Ubuntu 上安装 Clang 编译器 摊主将在本文中介绍如何在 Ubuntu 上安装 Clang 编译器 摊主的个人技术博客 xff1a https rickyxcoder top x1f9d1 x1f3fb x1f4bb
  • 【信息奥赛题解】四平方和(详细分析题解 & C++ 代码)

    x1f4da 四平方和 摊主的个人技术博客 xff1a https rickyxcoder top x1f9d1 x1f3fb x1f4bb 备用站点 xff1a https rickyxcoder gitee io x1f680 题目浏览