1221. 四平方和--(暴力,二分)

题目:

1221. 四平方和 - AcWing题库

 思路1:暴力

暴力枚举
1.枚举顺序为从a到c,依次增大。
2.t=n-a*a-b*b-c*c,求得d=sqrt(t)
3.判断求出的d是否成立。d要求:d*d==t&&d>=c

#include<iostream>
#include<cmath>
using namespace std;
const int N=2300;
int n,a,b,c,d;
int main()
{cin>>n;for(a=0;a*a<n;a++)for(b=a;a*a+b*b<n;b++)for(c=b;a*a+b*b+c*c<n;c++){int t=n-a*a-b*b-c*c;d=sqrt(t);if(d*d==t&&d>=c){cout<<a<<" "<<b<<" "<<c<<" "<<d;return 0;}}
}

思路2:二分

1.以空间换取时间的思路。先枚举c,d的情况,将所以可能存入结构体Sum中。再枚举a,b的情况。我们若对Sum.s进行从小打到的排序,就可以用二分寻找满足条件的Sum。

2.在枚举a,b的过程中寻找Sum,此时已经可以确定a,b满足字典序,为保证c,d也为字典序,我们需要对结构体进行自定义排序,不仅仅要按照Sum.s从小到大的顺序排序,同时还要兼顾Sum.c和Sum.d。因此,这里我们需要用到自定义排序或者减号运算符重载。

 自定义排序:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 9 * 1e6;
int a, b, c, d, n, m;
struct Sum
{int s;int c;int d;
}sum[N];bool comp(struct Sum sum1,struct Sum sum2)//自定义输出
{if (sum1.s != sum2.s)return sum1.s < sum2.s;else if (sum1.c != sum2.c)return sum1.c < sum2.c;else return sum1.d < sum2.d;
}int main()
{cin >> n;//先枚举c,d,将平方和以及c,d存入结构体Sum(以空间换取时间)O(n3)->O(n2)for (c = 0; c * c < n; c++)for (d = c; c * c + d * d <= n; d++) {//存入结构体sum[m].s = c * c + d * d;sum[m].c = c;sum[m].d = d;m++;}sort(sum, sum + m, comp);//自定义输出(先后按照结构体内s,c,d从小到大顺序排序)//枚举a、b,同时二分查找符合条件的c、dfor(a=0;a*a<n;a++)for (b = a; a * a + b * b < n; b++) {int L = 0, R = m-1;//对下标二分int t = n - a * a - b * b;while (L < R) {int mid = L + R >> 1;if (sum[mid].s >= t)R = mid;else L = mid + 1;}if (sum[L].s == t) {cout << a << " " << b << " " << sum[L].c << " " << sum[L].d;return 0;}}
}
减号运算符重载:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 9 * 1e6;
int a, b, c, d, n, m;
struct Sum
{int s;int c;int d;bool operator<(const Sum& t)const//重载减号运算符,实现自定义排序{//不同情况下减号赋予不同含义,返回值也不一样if (s != t.s)return s < t.s;else if (c != t.c)return c < t.c;else return d < t.d;}
}sum[N];int main()
{cin >> n;//先枚举c,d,将平方和以及c,d存入结构体Sum(以空间换取时间)O(n3)->O(n2)for (c = 0; c * c <= n; c++)for (d = c; c * c + d * d <= n; d++) //存入结构体sum[m++] = { c * c + d * d,c,d };//结构体与类不同,无需构造函数sort(sum, sum + m);//自定义输出(先后按照结构体内s,c,d从小到大顺序排序)//枚举a、b,同时二分查找符合条件的c、dfor (a = 0; a * a < n; a++)for (b = a; a * a + b * b < n; b++) {int L = 0, R = m - 1;//对下标二分int t = n - a * a - b * b;while (L < R) {int mid = L + R >> 1;if (sum[mid].s >= t)R = mid;else L = mid + 1;}if (sum[L].s == t) {cout << a << " " << b << " " << sum[L].c << " " << sum[L].d;return 0;}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch实战---IMDB情感分析

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

原始航片匀色调色方法

使用PhotoRC 2.0软件&#xff0c;对原始航片进行批量匀色&#xff0c;可以自动处理和人机交互&#xff0c;保留exif信息。 软件下载链接&#xff1a; https://pan.baidu.com/s/1Jj4cMpq8xzYvSa1hhozH-g?pwdndfm 提取码&#xff1a;ndfm

知识点滴 - Email地址不区分大小写

电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址&#xff0c;如 "exampleemail.com"&#xff0c;并不区分字母的大小写。无论你输入的是大写字母还是小写字母&#xff0c;它仍然会到达同一个电子邮件账户。例如&#xff0c;如果您的电子邮件地址是 …

Linux 用户必备的 Git 图形化工具

Git 是一个免费的开源分布式版本控制系统&#xff0c;用于软件开发和其他几个版本控制任务。它旨在根据速度、效率和数据完整性来处理从小到大的项目。 Linux 用户主要可以通过命令行管理 Git&#xff0c;但是&#xff0c;有几个图形用户界面 (GUI) Git 客户端可以促进在 Linux…

DevOps持续集成-Jenkins(3)

文章目录 DevOpsDevOps概述Jenkins实战3&#xff1a;实战1和实战2的加强版&#xff08;新增SonarQube和Harbor&#xff09;⭐环境准备⭐项目架构图对比Jenkins实战1和实战2&#xff0c;新增内容有哪些&#xff1f;SonarQube教程采用Docker安装SonarQube &#xff08;在Jenkins所…

linux-防火墙

目录 一、防火墙概念 1.软件防火墙 2.iptables默认规则 3.iptables的五链 4.iptables动作 5.四表五链 6.iptables实例 一、防火墙概念 linux下防火墙一般分为软件防火墙、硬件防火墙 硬件防火墙&#xff1a;在硬件的级别实现防火墙过滤功能&#xff0c;性能高&#xf…

centos服务器搭建安装Gitlab教程使用教程

1、更新服务器&#xff1a; sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例&#xff0c;在服务器中&#xff0c;下载centos8的…

基于Android 10系统的瑞芯微RK3399K烧写镜像实录

基于Android 10系统的瑞芯微RK3399K烧写镜像实录 1. 前言2. 官网及相关资料3. 烧写固件所需软件4. 直接烧写单一固件步骤5. 固件文件6. Windows下烧写准备6.1 安装 RK USB 驱动6.2 连接设备 7. 烧写固件7.1 烧写统一固件 update.img7.2 烧写分区映像 8. Linux下烧写8.1 upgrade…

STM32 HAL库串口使用printf

STM32 HAL库串口使用printf 背景配置说明在usart.h中添加在usart.c中添加在工程中选中微库&#xff1a; 测试 背景 在我们使用CubeMX生成好STM32 HAL库工程之后&#xff0c;我们想使用printf函数来打印一些信息&#xff0c;配置如下&#xff1a; 配置说明 在usart.h中添加 …

水电站与数据可视化:洞察未来能源趋势的窗口

在信息时代的浪潮中&#xff0c;数据可视化正成为推动能源领域发展的重要工具。今天&#xff0c;我们将带您一起探索水电站与数据可视化的结合&#xff0c;如何成为洞察未来能源趋势的窗口。水电站作为传统能源领域的重要组成部分&#xff0c;它的运行与管理涉及大量的数据。然…

03 vi编辑器

vi编辑器的三种模式: 不同的模式下机键动作解释的意义是不一样的 编辑模式 插入模式 末行模式 文件的打开和关闭保存 移动光标

【强烈推荐】视频转gif、图片拼gif,嘎嘎好用,免费免费真的免费,亲测有效,无效过来打我

问题描述 最近遇到一个需求是需要将视频生成gif&#xff0c;这个看上去不是很难&#xff0c;所以有了以下的解决办法 解决办法 首先想到的当然是自己写一个&#xff0c;用了两套代码&#xff1a; from moviepy.editor import *# 读取视频文件 video_clip VideoFileClip(&quo…

Kafka - 3.x Kafka命令行操作

文章目录 OverViewTopic主题命令行操作重要参数帮助文档实操 生产者命令行操作重要参数帮助文档实操 消费者命令行操作重要参数帮助文档实操 OverView Topic主题命令行操作 重要参数 参数描述--bootstrap-server连接Kafka Broker的主机名和端口号--topic操作的主题名称--crea…

webpack 解决:TypeError: merge is not a function 的问题

1、问题描述&#xff1a; 其一、存在的问题为&#xff1a; TypeError: merge is not a function 中文为&#xff1a; 类型错误&#xff1a;merge 不是函数 其二、问题描述为&#xff1a; 想执行 npm run dev 命令&#xff0c;运行起项目时&#xff0c;控制台报错 TypeErro…

高级深入--day39

(实战项目三)新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类、小类、小类里的子链接&#xff0c;以及子链接页面的新闻内容。 效果演示图&#xff1a; items.py import scrapy import sys reload(sys) sys.setdefaultencoding("utf-8")class SinaItem(scrapy.I…

SAD notes

ESKF 总结 prediction 更新误差先验 F F F通过3.42来算 得到 这里有点绕的一点是: 误差状态的 F F F牵涉到名义状态, 而名义状态又需要在时间上推进更新 其中, F中的名义状态的推进通过公式3.41得到, (名义状态不考虑误差, 这一点从3.41d, 3.41e可以看出, 误差状态只考虑…

React-Redux总结含购物车案例

React-Redux总结含购物车案例 reduc简介 redux是react全家桶的一员&#xff0c;它为react给i共可预测化的状态管理机制。redux是将整个应用状态存储到一个地方&#xff0c;成为store,里面存放着一颗树状态(state,tree),组件可以派发dispatch行为action给store,而不是直接通知其…

Spring Authorization Server 1.1 扩展 OAuth2 密码模式与 Spring Cloud Gateway 整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…

SpringCloud 微服务全栈体系(四)

第六章 Nacos 配置管理 Nacos 除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 一、统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案…

ubuntu执行普通用户或root用户执行apt-get update时报错Couldn‘t create temporary file /tmp/...

apt-get update无法更新&#xff0c;报错&#xff1a; Couldnt create temporary file /tmp/apt.conf.GSzv74 for passing config to&#xff0c;&#xff0c;&#xff0c; 这是由于/tmp目录没有权限导致的&#xff0c;解决办法&#xff1a; chmod 777 /tmp