四平方和【第七届蓝桥杯省赛C++A/B组,第七届蓝桥杯省赛JAVAB/C组】
四平方和
四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多 4 个正整数的平方和。
如果把 0 包括进去,就正好可以表示为 4 个数的平方和。
比如:
\(5=0^2+0^2+1^2+2^2\)
\(7=1^2+1^2+1^2+2^2\)
对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对 4 个数排序:
\(0≤a≤b≤c≤d\)
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。
输入格式
输入一个正整数 N。
输出格式
输出4个非负整数,按从小到大排序,中间用空格分开。
数据范围
\(0<N<5∗106\)
输入样例:
5
输出样例:
0 0 1 2
思路
- 暴力
- 二分(见二分模板题)
Code
1.暴力(11/12 TLE)
点击查看代码
#include<iostream>
#include<cmath>
using namespace std;
int n;
int main(){
cin >> n;
for(int a = 0; a * a <= n; a ++){
for(int b = a; a * a + b * b<= n; b ++){
for(int c = b;a * a + b * b + c * c<= n; c ++){
int t = n - a * a - b * b - c * c;
int d = sqrt(t);
//cout << t << " " << d << endl;
if(d*d == t && d >= c){
printf("%d %d %d %d",a,b,c,d);
return 0;
}
}
}
}
}
2. 二分
点击查看代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define endl '\n'
using namespace std;
const int N = sqrt(5*1e6) + 10;
typedef struct temp{
int c,d,s;
}temp;
int n;
temp t[N * N];
bool cmp(temp a,temp b){
if(a.s != b.s)return a.s < b.s; //二分前的预处理为有序
else if(a.c != b.c)return a.c < b.c;//维护答案要求的顺序
else return a.d < b.d;
}
bool check(int mid,int x){
int c = t[mid].c,d = t[mid].d;
if(c*c + d*d >= x)return 1;
else return 0;
}
int main(){
// ios::sync_with_stdio(false);
// cin.tie(0),cout.tie(0);
cin >> n;
int cnt = 0;
for(int c = 0; c * c <= n; c ++ ){ //预处理
for(int d = c; c * c + d * d <= n; d ++){
t[cnt ++] = {c,d,c * c + d * d};
}
}
sort(t,t + cnt,cmp);
//for(int i = 0; i < cnt; i ++)printf("%d %d %d\n",t[i].c,t[i].d,t[i].s);
for(int a = 0; a * a <= n; a ++ ){ //优化为两层for循环+二分
for(int b = a; a * a + b * b <= n; b ++ ){
int x = n - a * a - b * b; //搜索值
int l = 0, r = cnt - 1; //搜索范围
while(l < r){
int mid = l + r >> 1;
if(check(mid,x))r = mid;
else l = mid + 1;
}
int c = t[l].c,d = t[l].d; //注意这里是l或者r而不是mid
if(x == c*c + d*d && b <= c){ //维护答案要求的顺序
printf("%d %d %d %d",a,b,c,d); //按格式输出
return 0;
}
}
}
return 0;
}
四平方和【第七届蓝桥杯省赛C++A/B组,第七届蓝桥杯省赛JAVAB/C组】的更多相关文章
- java算法 第七届 蓝桥杯B组(题+答案) 8.四平方和
8.四平方和 (程序设计) 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + ...
- 第七届蓝桥杯javaB组真题解析-四平方和(第八题)
题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...
- java实现第七届蓝桥杯四平方和
四平方和 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^ ...
- 蓝桥杯-四平方和-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 蓝桥杯比赛javaB组练习《四平方和》
四平方和 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + 1^2 + 2^27 ...
- 2016蓝桥杯省赛C/C++A组第八题 四平方和
题意: 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + 2^ ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- 7-Java-C(四平方和)
题目描述: 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + ...
- 费马平方和定理&&斐波那契恒等式&&欧拉四平方和恒等式&&拉格朗日四平方和定理
费马平方和定理 费马平方和定理的表述是:奇素数能表示为两个平方数之和的充分必要条件是该素数被4除余1. 1. 如果两个整数都能表示为两个平方数之和的形式,则他们的积也能表示为两个平方数之和的形式. $ ...
- 第七届蓝桥杯省赛javaB组 第七题剪邮票
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
随机推荐
- JavaScript基本语法(函数与对象)
3.函数 #①内置函数 内置函数:系统已经声明好了可以直接使用的函数. #[1]弹出警告框 alert("警告框内容"); #[2]弹出确认框 用户点击『确定』返回true,点 ...
- 前端开发日常——CSS动画无限轮播
近来没有什么值得写的东西,空闲的时候帮前端的同学做了些大屏上的展示模块,就放在这里写写吧,手把手"需求->设计-> 实现",受众偏新手向. 为了直观便于理解, 直接把结 ...
- docker gitlab迁移 备份 部署 搭建以及各种问题
当前环境 服务器A 服务器B ubuntu docker gitlab(版本一致) docker安装gitlab 由于考虑到gitlab 包含了⾃身的nginx.数据库.端⼝占⽤等等因数,这⾥使⽤的是 ...
- 微服务开发框架-----Apache Dubbo
文章目录 一.简介 二.概念与架构 一.简介 Apache Dubbo 是一款微服务开发框架,提供了RPC通信与微服务治理两大关键能力.使用Dubbo开发的微服务,将具备相互之间的远程发现与通信能力, ...
- Python爬虫requests请求库
requests:pip install request 安装 实例: import requestsurl = 'http://www.baidu.com'response = requests. ...
- 关于Object.keys()和Object.values()的使用
关于Object.keys()和Object.values()的使用 1. 关于Object.keys() 1) 处理对象,返回可枚举的所有可枚举属性的字符串数组 let person ={ name ...
- KNN算法之集美大学
在本篇文章中,我即将以在集美大学收集到的一些数据集为基础,使用KNN算法进行一系列的操作 一.KNN算法 首先,什么是KNN算法呢,这得用到老祖宗说的一句话"近朱者赤近墨者黑", ...
- AtCoder Beginner Contest 277 题解
掉大分力(悲 A - ^{-1} 直接模拟. #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false) #define ...
- 【题解】CF919D Substring
题面传送门 解决思路: DP 与拓扑结合.\(f_{i,j}\) 表示到 \(i\) 位置 \(j\) 的最大次数. 将 \(a \sim z\) 转成数字 \(0\sim 25\) ,方便存储. 考 ...
- mindxdl--common--logger.go
// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common the contr ...