四平方和c++

题目

输入样例:

5

输出样例:

0 0 1 2
思路

        首先想到的是使用三重循环求出 a,b,c,d 可以通过 n - a - b - c 得到。理论时间复杂度为O(1000 * 1000 * 1000) = O(10^9)。因此需要想办法降低循环层数。

        考虑使用两个双重循环来做。第一个双重循环保存 s = c^2+d^2 所有可能的值,又因为题目要求输出 c 和 d ,因此也要保留 c 和 d。第二个双重循环枚举所有 a 和 b 的组合,对于每个 a 和 b,判断是否有一个 s,使得 s + a^2 + b^ 2 = n。为了快速找到是否存在这样的s,可以使用二分查找。而二分查找需要序列有序,那如何对第一个双重循环求出的值进行排序呢?题目要求按升序排列,因此要在满足 s + a^2 + b^ 2 = n 的前提下,c和d尽可能小,并且c <= d;因此需要按升序进行排列。

代码
#include<bits/stdc++.h>
using namespace std;

//每个数有1 ~ sqrt(n)个可能的值,两个数可能的组合最多有(sqrt(n) * sqrt(n))/ 2 种
const int N = 2.5e6 + 10;
struct C {
  int t, c, d;
  bool operator < (const C &s)const
  {
    if (t != s.t)return t < s.t;
    if (c != s.c)return c < s.c;
    return d < s.d;
  }
}sum[N];

int m;

int main()
{
  int n;
  scanf("%d", &n);
  
  //第一个双重循环:枚举保存c^2+d^2所有可能的值
  for (int c = 0; c * c <= n; c ++)
  for (int d = c; d * d + c * c <= n; d ++)//c <= d
  sum[m++] = {c * c + d * d, c, d};
  
  sort(sum, sum + m);
  
  //第二个双重循环
  for (int a = 0; a * a <= n; a ++)
  {
    for (int b = a; b * b + a * a <= n; b ++)
    {
      int t = n - a * a - b * b;
      int l = 0, r = m;
      while (l < r)
      {
        int mid = (l + r) >> 1;
        if(sum[mid].t >= t)r = mid;
        else l = mid + 1;
      }
      
      if (t == sum[l].t)
      {
        printf("%d %d %d %d", a, b, sum[l].c, sum[l].d);
        return 0;
      }
    }
  }
  return 0;
}
疑问
  1. 为什么两个双重循环得到的答案一定是a <= b <= c <= d?在代码中没有明显看到b <= c啊!

通过两个双重循环我们发现,(c,d)组合与(a, b)组合在个数、数值上都相同,a和b是从小到大枚举的,所以第一次找到四元组时,a和b一定是四元组中最小的两个数。因此,c和d不能比a和b小了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unreal Engine5记录 02简单的第三人称游戏

导航视口 选择对应的第三人称游戏选项&#xff0c;并选择项目创建的位置&#xff0c;点击创建 创建之后&#xff0c;会打开一个默认的导航视口 点击运行&#xff0c;进入窗口 你就像进入了一个游戏关卡&#xff0c;这个和你玩的第三人称游戏一样&#xff08;类似吃鸡&#xf…

React-useEffect

1.概念 说明&#xff1a;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送 A列AX请求&#xff0c;更改DOM等。 2.案例 // useEffect用于组件不是由事件引起的而是由渲染本身引起的操作&#xff0c;如ajax,更改Dom等。 import { useEffect,…

图解目标检测的现代历史

任务分类 图像分类 根据图像的主要对象对图像进行分类。 目标定位 预测包含主要对象的图像区域。然后&#xff0c;可以使用图像分类来识别该区域内的物体 目标检测 定位和分类出现在图像中的所有对象。这个任务通常包括&#xff1a;确定区域&#xff0c;然后对其中的对象进行…

SpringCloudGateway工作原理与链路图

SpringCloudGateway基本介绍 Spring Cloud Gateway 构建于Spring Boot 2.x、 Spring WebFlux和Project Reactor之上。因此,在使用 Spring Cloud Gateway 时,您可能不会应用许多熟悉的同步库(例如 Spring Data 和 Spring Security)和模式。 Spring Cloud Gateway 需要 Sprin…

javaWebssh文玩竞价管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh文玩竞价管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

1909_Arm Cortex-M3编程模型

1909_Arm Cortex-M3编程模型 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) 编程模型的部分除了单独的核心寄存器描述之外&#xff0c;它还包含有关处理器模式和软件执行和堆栈的特权级别的信息。 处理器有两种模式&#xff0c;分别是线程模式和Handle…

2024年【山东省安全员C证】考试试卷及山东省安全员C证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员C证考试试卷根据新山东省安全员C证考试大纲要求&#xff0c;安全生产模拟考试一点通将山东省安全员C证模拟考试试题进行汇编&#xff0c;组成一套山东省安全员C证全真模拟考试试题&#xff0c;学员可通过…

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?

小皮面板phpstudy支持的PHP版本有很多&#xff0c;包括5.2.17、5.3.29、5.4.45、5.5.9、5.6.9、7.0.9、7.1.9、7.2.9、7.3.4、7.3.9、7.4.3、8.0.2、8.2.9。那么我们如何安装其他的php版本和切换网站的php版本呢&#xff1f;只需要简单几步即可&#xff0c;具体如下&#xff1a…

解决前端性能问题:如何优化大量数据渲染和复杂交互?

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 …

is not valid JSON at JSON.parse

在后台读取一个文件里的JSON数据&#xff0c;转换成字符串返回给前端&#xff0c;前端使用JSON.parse转换JSON报错。在将JSON校验和压缩后发现前端还是转换失败。在返回结果的时候可以看见一个小红点 最后排查&#xff0c;不带BOM的识别是Java遗留的一个bug。 解决方案&#…

OSI 的七层模型

OSI七层模型 一般指开放系统 互连参考模型 (Open System Interconnect 简称OSI) 是国际标准化组 织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系 统提供了一种功能结构的框架。 应用层&#xff1a;各种应用程序协议&#xff0c;比…

第八篇:预测受众(Predictive audience)技术是如何赋能数字化营销生态的?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒…

CSS字体样式的使用,先收藏了

CSS 篇 link 与 import 的区别 link 是 HTML 方式&#xff0c; import 是CSS方式link 最大限度支持并行下载&#xff0c; import 过多嵌套导致串行下载&#xff0c;出现 FOUC (文档样式短暂失效)link 可以通过 rel"alternate stylesheet" 指定候选样式浏览器对 lin…

spark 实验二 RDD编程初级实践

目录 一. pyspark交互式编程示例&#xff08;学生选课成绩统计&#xff09; 该系总共有多少学生&#xff1b; 该系DataBase课程共有多少人选修&#xff1b; 各门课程的平均分是多少&#xff1b; 使用累加器计算共有多少人选了DataBase这门课。 二.编写独立应用程序实现数…

【深圳五兴科技】Java后端面经

本文目录 写在前面试题总览1、java集合2、创建线程的方式3、对spring的理解4、Spring Boot 和传统 Spring 框架的一些区别5、springboot如何解决循环依赖6、对mybatis的理解7、缓存三兄弟8、接口响应慢的处理思路9、http的状态码 写在前面 关于这个专栏&#xff1a; 本专栏记录…

微信小程序云开发教程——墨刀原型工具入门(页面交互+交互案例教程)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

AlibabaCloud微服务:Linux 部署 Sentinel 流量控制

目录 一、实验 1.环境 2.Linux 部署 Sentinel 3. 微服务接入Sentinel配置 二、 问题 1.Linux本地启动Sentinel控制台 2.JDBC连接失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统软件版本IP备注Linuxopenjdk 1.8.0192.168.204.200 maven3.5.0nac…

基于QGIS的研究区域遥感影像裁切下载方法-以岳麓区为例

目录 前言 一、数据说明 1、遥感影像 2、矢量范围 二、按矢量范围导出 1、第一步、导出影像 2、第二步、设置输出格式 3、设置裁切范围 4、设置分辨率 三、按矢量范围掩膜 1、第一步、打开裁剪工具 2、第二步、参数设置 ​编辑 3、执行掩膜 四、webgis支持 1、生成运行…

【Redis】Redis持久化模式AOF

目录 引言 AOF持久化模式​编辑​编辑 AOF与RDB的混合持久化(4.x后的新特性) AOF的优缺点 修复破损aof文件 到底用RDB还是AOF 引言 AOF就相当于上面的日志形式。是追加式备份。所有发生的写操作&#xff0c;新增啊&#xff0c;修改啊&#xff0c;删除啊&#xff0c;这些命…

AI大模型与小模型之间的“脱胎”与“反哺”(第四篇)

76. **动态领域适应网络&#xff08;Dynamic Domain Adaptation Networks, DDANs&#xff09;**&#xff1a; 创建能动态调整自身参数以适应新行业特性的网络结构&#xff0c;使得AI大模型能在不完全重新训练的情况下快速适应新的业务场景和环境变化。 77. **元学习中的元策略优…