1221. 四平方和(超详细!!)

news/2024/5/22 9:57:39

输入样例:

5

输出样例:

0 0 1 2

本题思路:以空间换时间
由于暴力解法我们至少要枚举三个数,然后计算出第四个数
呢么需要进行三重循环,时间复杂度大概为O(n3),则会超时
所以我们要进行优化来降低时间复杂度
我们的思路是:
将三重循环,拆解成两次二重循环
在第一次循环中,先计算c^2+d^2,然后记录下结果和此时的c,d的值
在第二次循环中,可以直接通过遍历a,b,查找t(t=n-a^2-b^2)
找到的第一组满足a^2+b^2+c^2+d^2=n,的便是字典序最小的,直接输出即可
最重要的怎样存储c^2+d^2?
可以考虑哈希表,也可以使用结构体数组+二分 

 哈希表(unordered_map现在数据加强了过不了,但是可以模拟哈希表)

#include<iostream>
#include<algorithm>
#include<cstring>//memset赋值的头文件
#include<cmath>//使用了sqrt开根号函数
using namespace std;
// typedef pair<int,int> PII;
const int N=5e6+10;int n;
int r[N];
// c有根号N种可能,d也是所以组合起来,是2*根号N种<N
int main()
{cin>>n;memset(r,-1,sizeof r);//先将其附一个特殊值,也就是题目不会出现的值//由于a,c,b,d 肯定是>=0for(int c=0;c*c<=n;c++){for(int d=c;c*c+d*d<=n;d++)//为了按字典序输出确保c<b{int t=c*c+d*d;if(r[t]==-1)//由于要求字典序最小,所以保留的是最先出现的值,如果之前赋值过则不需要再进行赋值{r[t]=c;}}}for(int a=0;a*a<=n;a++){for(int b=a;a*a+b*b<=n;b++){int t=n-a*a-b*b;if(r[t]==-1)//说明没有这组解continue;int c=r[t];int d=sqrt(t-c*c);//sqrt开根号的意思cout<<a<<' '<<b<<' '<<c<<' '<<d;return 0;}}return 0;
}

 结构体数组+二分 

#include<iostream>
#include<algorithm>//sort排序函数的头文件
using namespace std;
const int N=5e6+10;
struct Sum{int s,c,d;bool operator < (const Sum &t) const//重载<原因是应为,为了保证字典序{if(s !=t.s) return s < t.s;//如果这个s(c*c+d*d)之前出现过则就比较c和dif(c !=t.c) return c < t.c;//在s相同时,保证c最小return d<t.d;//在s和c相同时,保证d最小}
};int n;
Sum r[N];int main()
{cin>>n;int k=0;for(int c=0;c*c<=n;c++){for(int d=c;c*c+d*d<=n;d++){r[k++]={c*c+d*d,c,d};//{s,c,d},对应的}}sort(r,r + k);//使用的是重载的<号for(int a=0;a*a<=n;a++){for(int b=a;a*a+b*b<=n;b++){int t=n-(a*a+b*b);//找到t,由于里面也会有多个值为t但是我们要找到第一个,所以相当于找右条件(最小的大于等于t)的左边界int L=0,R=k-1;while(L<R){int mid=L+R>>1;if(r[mid].s>=t) R=mid;else L=mid+1;}if(r[R].s==t)//如果找到,就直接输出{cout<<a<<' '<<b<<' '<<r[R].c<<' '<<r[R].d;return 0;}}}return 0;
}


http://www.mrgr.cn/p/53672675

相关文章

【Rust笔记】意译解构 Object Safety for trait

意译解构Object Safety for trait 借助【虚表vtable】对被调用成员函数【运行时内存寻址】的作法允许系统编程语言Rust模仿出OOP高级计算机语言才具备的【专用多态Ad-hoc Polymorphism】特性。 计算机高级语言中的“多态”术语是一个泛指。它通常可被细化为 基于继承关系的“子…

热风梳C22.2 NO.3亚马逊加拿大审核标准

加拿大是目前亚马逊所有站点中&#xff0c;商业规模大、发展势头迅猛的站点之一。亚马逊加拿大站每月吸引近1600万访客。其优势在于在加拿大&#xff0c;目前平台的竞争较小&#xff0c;商家容易出单。既然加拿大站有这么多优势&#xff0c;那产品上架需要有哪些检测认证合规方…

Rust操作MySQL

查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库&#xff1a; chrono 流式查询使用&#xff1a; query_iter 输出到Vec使用&#xff1a; query 映射到结构体使用&#xff1a; query_map 获取单条数据使用&#xff1a; query_first 命名…

消息队列——rabbitmq的不同工作模式

目录 Work queues 工作队列模式 Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式 工作模式总结 Work queues 工作队列模式 C1和C2属于竞争关系&#xff0c;一个消息只有一个消费者可以取到。 代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关…

【机器学习】了解 AUC - ROC 曲线

一、说明 在机器学习中&#xff0c;性能测量是一项基本任务。因此&#xff0c;当涉及到分类问题时&#xff0c;我们可以依靠AUC - ROC曲线。当我们需要检查或可视化多类分类问题的性能时&#xff0c;我们使用AUC&#xff08;曲线下面积&#xff09;ROC&#xff08;接收器工作特…

(八九)如何与InfluxDB交互InfluxDB HTTP API

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 8 章 前言&#xff1a;如何与InfluxDB交互 1、InfluxDB启动后&#xff0c;会向外提供一套HTTP API。外部程…

【机器学习】Feature Engineering and Polynomial Regression

Feature Engineering and Polynomial Regression 1. 多项式特征2. 选择特征3. 缩放特征4. 复杂函数附录 首先&#xff0c;导入所需的库&#xff1a; import numpy as np import matplotlib.pyplot as plt from lab_utils_multi import zscore_normalize_features, run_gradien…

级联选择框

文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖&#xff0c;并 npm i 导入…

YouIcons-矢量图标、LOGO和插图素材下载 48000000+

YouIcons是一个免费下载矢量图标、LOGO和插图素材下的网站&#xff0c;图标量高达千万级别&#xff0c;目前共收录48109736个&#xff0c;是世界领先的创意徽标logo社区&#xff0c;供创意人员下载、分享、成长和使用&#xff0c;是设计师获取灵感、发现并与全球设计师联系的社…

PostgreSQL构建时间

– PostgreSQL构建时间 select make_timestamp(2023,7,27,7,34,16);

C#——多线程之Task

C#——多线程之Task 前言一、Task是什么&#xff1f;二、各应用场景以及实例分析1.异步执行代码2.等待异步操作完成3.并行执行多个任务4.处理异常5.取消异步操作 三、一些其他问题1.WhenAll与WhenAny的区别 总结 前言 在代码编写过程中&#xff0c;经常会用到多线程的知识&…

三子棋(超详解+完整码源)

三子棋 前言一&#xff0c;游戏规则二&#xff0c;所需文件三&#xff0c;创建菜单四&#xff0c;游戏核心内容实现1.棋盘初始化1.棋盘展示3.玩家下棋4.电脑下棋5.游戏胜负判断6.game&#xff08;&#xff09;函数内部具体实现 四&#xff0c;游戏运行实操 前言 C语言实现三子棋…

volley 学习笔记1--发送请求

一、概览 Volley 具有以下优势&#xff1a; 自动网络请求调度。 多个并发网络连接。 透明磁盘和具有标准 HTTP 缓存一致性的内存响应缓存。 支持请求优先级。 取消请求 API。您可以取消单个请求&#xff0c;也可以设置要取消的请求的时间段或范围。 可轻松自定义&#xff…

手机快充协议

高通:QC2.0、QC3.0、QC3.5、QC4.0、QC5.0、 FCP、SCP、AFC、SFCP、 MTKPE1.1/PE2.0/PE3.0、TYPEC、PD2.0、PD3.0/3.1、VOOC 支持 PD3.0/PD2.0 支持 QC3.0/QC2.0 支持 AFC 支持 FCP 支持 PE2.0/PE1.1 联发科的PE&#xff08;Pump Express&#xff09;/PE 支持 SFCP 在PP…

Stable Diffusion如何生成高质量的图-prompt写法介绍

文章目录 Stable Diffusion使用尝试下效果prompt的编写技巧prompt 和 negative promptPrompt格式Prompt规则细节优化Guidance Scale 总结 Stable Diffusion Stable Diffusion是一个开源的图像生成AI系统,由Anthropic公司开发。它基于 Transformer模型架构,可以通过文字描述生成…

学习笔记|大模型优质Prompt开发与应用课(二)|第五节:只需3步,优质Prompt秒变应用软件

原作者&#xff1a;依依│百度飞桨产品经理 一乔│飞桨开发者技术专家 分享内容 01:大模型应用简介 02:LLM应用开发范式 03: Al Studio大模型社区 04:AI对话类应用开发技巧 大模型技术爆发&#xff0c;各类应用产品涌现 文心产业级知识增强大模型 工作中的“超级助手”—…

一文谈谈Git

"And if forever lasts till now Alright" 为什么要有git&#xff1f; 想象一下&#xff0c;现如今你的老师同时叫你和张三&#xff0c;各自写一份下半年的学习计划交给他。 可是你的老师是一个极其"较真"的人&#xff0c;发现你俩写的学习计划太"水&…

MySQL5.7 与 MariaDB10.1 审计插件兼容性验证

这是一篇关于发现 MariaDB 审计插件导致 MySQL 发生 crash 后&#xff0c;展开适配验证并进行故障处理的文章。 作者&#xff1a;官永强 爱可生DBA 团队成员&#xff0c;擅长 MySQL 运维方面的技能。热爱学习新知识&#xff0c;亦是个爱打游戏的宅男。 本文来源&#xff1a;原创…

简单认识redis高可用实现方法

文章目录 一、redis群集三种模式二、 Redis 主从复制1、简介2、作用&#xff1a;3、流程&#xff1a;4.配置主从复制 三、Redis 哨兵模式1、简介2、原理:3、作用&#xff1a;4、哨兵结构由两部分组成&#xff0c;哨兵节点和数据节点&#xff1a;5、故障转移机制&#xff1a;6、…

软件外包开发的后台开发语言

在软件外包开发中&#xff0c;后台语言的选择通常取决于项目需求、客户偏好、团队技能和开发效率。今天和大家分享一些常用的后台语言及选择它们的原因&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…