蓝桥杯小白打卡第四天

1221. 四平方和

问题描述

四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。

例如:

  • (5 = 0^2 + 0^2 + 1^2 + 2^2)
  • (7 = 1^2 + 1^2 + 1^2 + 2^2)

对于一个给定的正整数,可能存在多种平方和的表示法。要求对 4 个数排序,满足 (0 \leq a \leq b \leq c \leq d),并对所有的可能表示法按 (a)、(b)、(c)、(d) 为联合主键升序排列,最后输出第一个表示法。

输入格式

输入一个正整数 (N)。

输出格式

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

数据范围

(0 < N < 5\times10^6)

输入输出样例

输入样例

5

输出样例

0 0 1 2

问题思路

在这里插入图片描述
在这里插入图片描述

问题代码

暴力做法如下


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int main(){
    int n;
    cin>>n;//得到我们要计算的数字
    //题目要求我们以字典序输出,那么我们从a开始到d进行for循环
    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);//注意这个地方必须是int d,如果是提前定义的int的话,比如d=sqrt(t)
                //那么这个时候,就会出现问题
                if(d*d==t){
                    printf("%d %d %d %d\n",a,b,c,d);
                    return 0; 
                }
            }
        }
        
    }
}

二分做法

//由于题目要求最终的输出结果满足字典序,所以我们采用以下的方法
//首先要计算出c和d的值,并将这些值(c,d,c*c+d+d)保存下来,并通过某种手段,将保存下来的数据,按照c*c+d*d的大小排列
//随后计算a和b的值,通过与n值相减,从而得到应有的c*c+d*d的值
//之后,经过二分的处理,更快的得到c和d
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>


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;//这里的条件只能是不等于,这样写的目的就是为了简化代码
        if(c!=t.c) return c<t.c;
        return d<t.d;
    }
}su[N];
int m;//记录保存下来有多少个c和d组合
int main(){
    int n;
    cin>>n;
    for(int c=0;c*c<=n;c++){
        for(int d=c;c*c+d*d<=n;d++){
            //计算出所有结果,保存
            su[m++]={c*c+d*d,c,d};
        }
    }
    sort(su,su+m);
    //接下来进行c和d的枚举
    for(int a=0;a*a<=n;a++){
        for(int b=0;b*b+a*a<=n;b++){
            int t=n-a*a-b*b;//对于二分,这个t就是我要查找的x值
            int l=0,r=m-1;
            while(l<r){
                int mid=l+r>>1;
                if(su[mid].s>=t) r=mid;
                else l=mid+1;
            }
            if(su[l].s==t) {
                printf("%d %d %d %d",a,b,su[l].c,su[l].d);
                return 0;
            }
            
        }
    }
    
    
    return 0;
}

哈希表

//哈希表的方法,是在二分的基础上再进行修改,在二分的解决方法中,我们创建了一个struct sum 结构体
//而在这里我们通过使用unorderer_map中的结构,便不再需要创建结构体了
//并且也不在需要对结果相同的c和d进行保存,只需要保存遍历到的第一个
//不在需要对保存过来的进行计数,因为,不需要再进行手动排序
//由于哈希表是字典的结构,所以我们让key值为c*c+d*d,另外创建一个pair结构,用来保存c和d
//哈希表做法
#include<iostream>
#include <cstdio>
#include<cstring>
#include<algorithm>
#include <unordered_map>

#define x first
#define y second

using namespace std;


typedef pair<int,int> PII;
unordered_map<int,PII> S;


int main(){
    int n;
    cin>>n;
    for(int c=0;c*c<=n;c++){
        for(int d=c;c*c+d*d<=n;d++){
            int t=c*c+d*d;
            if(S.count(t)==0) S[t]={c,d};
        }
    }
    
    for(int a=0;a<=n;a++)
        for(int b=a;b<=n;b++){
            int t=n-a*a-b*b;
            if(S.count(t)){
                printf("%d %d %d %d",a,b,S[t].x,S[t].y);
                return 0;
            }
        }
    
    return 0;
}

1227. 分巧克力

问题描述

儿童节那天有 K K K 位小朋友到小明家做客,小明拿出珍藏的 N N N 块巧克力招待他们。其中第 i i i 块巧克力是 H i × W i H_i\times W_i Hi×Wi 的方格组成的长方形。

为公平起见,小明要从这 N N N 块巧克力中切出 K K K 块形状为正方形、边长为整数且大小相同的巧克力分给小朋友们。

例如,一块 6 × 5 6\times5 6×5 的巧克力可以切出 6 6 6 2 × 2 2\times2 2×2 的巧克力或者 2 2 2 3 × 3 3\times3 3×3 的巧克力。

小朋友们希望得到的巧克力尽可能大,需要计算出能切出的正方形巧克力的最大边长。

输入格式

  • 第一行包含两个整数 N N N K K K
  • 以下 N N N 行每行包含两个整数 H i H_i Hi W i W_i Wi

输入保证每位小朋友至少能获得一块 1 × 1 1\times1 1×1 的巧克力。

输出格式

输出切出的正方形巧克力最大可能的边长。

数据范围

  • 1 ≤ N , K ≤ 1 0 5 1\leq N,K\leq10^5 1N,K105
  • 1 ≤ H i , W i ≤ 1 0 5 1\leq H_i,W_i\leq10^5 1Hi,Wi105

输入输出样例

输入样例

2 10
6 5
5 6

输出样例

2

问题思路

问题代码

#include<iostream>
#include <cstdio>
#include<cstring>
#include <algorithm>

using namespace std;

const int N=1e5+10;
int H[N],W[N];
int n,k;
//最后至少要有k块巧克力

int check(int mid){
    int res=0;//局部变量必须赋值
    for(int i=0;i<n;i++){
        res+=(W[i]/mid)*(H[i]/mid);//结果是最后能得到的分割后巧克力数量
    }
    return res;
}

int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++) scanf("%d %d",&H[i],&W[i]);
    //完成输入
    
    int l=1,r=1e5;
    while(l<r){
        int mid=l+r+1>>1;
        if(check(mid)>=k){
            //check函数的结果是返回当前能够切割出巧克力的数量
            //说明此时,巧克力的大小还可以扩大
            l=mid;
        }
        else r=mid-1;
    }
    cout<<r<<endl;
    
    return 0;
    
}

795. 前缀和

问题描述

输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l, r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。

输入格式

第一行包含两个整数 nm
第二行包含 n 个整数,表示整数数列。
接下来 m 行,每行包含两个整数 lr,表示一个询问的区间范围。

输出格式

m 行,每行输出一个询问的结果。

数据范围

  • (1\leq l\leq r\leq n)
  • (1\leq n,m\leq 100000)
  • (-1000\leq) 数列中元素的值 (\leq 1000)

输入样例

5 3
2 1 3 6 4
1 2
1 3
2 4

输出样例

3
6
10
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int N=1e5+10;
int a[N],s[N];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){ 
        scanf("%d",&a[i]);
        s[i]=s[i-1]+a[i];
    }
    while(m--){
        int a,b;
        cin>>a>>b;
        cout<<s[b]-s[a-1]<<endl;
        
    }
    return 0;
}

796. 子矩阵的和

子矩阵和查询问题

问题描述

输入一个nm列的整数矩阵,再输入q个询问,每个询问包含四个整数x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。

输入格式

  1. 第一行包含三个整数nmq
  2. 接下来n行,每行包含m个整数,表示整数矩阵。
  3. 接下来q行,每行包含四个整数x1,y1,x2,y2,表示一组询问。

输出格式

q行,每行输出一个询问的结果。

数据范围

  • 1≤n,m≤1000
  • 1≤q≤200000
  • 1≤x1≤x2≤n
  • 1≤y1≤y2≤m
  • -1000≤矩阵内元素的值≤1000

输入样例

3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4

输出样例

17
27
21

题目思路

在这里插入图片描述

题目代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N=1e3+10;
int a[N][N],s[N][N];

int main(){
    int x1,y1,x2,y2,n,m,q;
    scanf("%d%d%d", &n, &m, &q);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
        }//完成前缀和的模板
    while(q--){
        //随后根据题目所给的x1x2x3x4进行计算
        cin>>x1>>y1>>x2>>y2;
        printf("%d\n", s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]);
    }
   
    return 0;
}

99. 激光炸弹

题目描述

地图上有 N N N 个目标点,用整数 X i , Y i X_i,Y_i Xi,Yi 表示目标在地图上的位置,每个目标都有一个价值 W i W_i Wi

注意:不同目标可能在同一位置。

现在有一种新型的激光炸弹,可以摧毁一个包含 R × R R×R R×R 个位置的正方形内的所有目标。

激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和 x x x y y y 轴平行。

求一颗炸弹最多能炸掉地图上总价值为多少的目标。

输入格式

第一行输入正整数 N N N R R R,分别代表地图上的目标数目和正方形包含的横纵位置数量,数据用空格隔开。

接下来 N N N 行,每行输入一组数据,每组数据包括三个整数 X i , Y i , W i X_i,Y_i,W_i Xi,Yi,Wi,分别代表目标的 x x x 坐标, y y y 坐标和价值,数据用空格隔开。

输出格式

输出一个正整数,代表一颗炸弹最多能炸掉地图上目标的总价值数目。

数据范围

  • 0 ≤ R ≤ 1 0 9 0\leq R\leq10^9 0R109
  • 0 < N ≤ 10000 0<N\leq10000 0<N10000
  • 0 ≤ X i , Y i ≤ 5000 0\leq X_i,Y_i\leq5000 0Xi,Yi5000
  • 0 ≤ W i ≤ 1000 0\leq W_i\leq1000 0Wi1000

输入样例

2 1
0 0 1
1 1 1

输出样例

1

题目代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;
const int N=5e3+10;
int s[N][N];

int main(){
    int n,r;
    cin>>n>>r;
    r=min(r,5001);
    int x_max=r,y_max=r;
    while(n--){
        int x,y,w;
        
        scanf("%d %d %d",&x,&y,&w);
        x++,y++;
        s[x][y]+=w;
        x_max=max(x_max,x),y_max=max(y_max,y);
    }
    //完成所有的输入,之后再遍历一遍,计算出来前缀和的模板
    
     for (int i = 1; i <= x_max; i ++ )
        for (int j = 1; j <= y_max; j ++ )
            s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
    
    int res=0;
    for(int i=r;i<=x_max;i++){
        for(int j=r;j<=y_max;j++){
           res = max(res, s[i][j] - s[i - r][j] - s[i][j - r] + s[i - r][j - r]);
        }
    }
    cout<<res;
    return 0;
}

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

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

相关文章

【kafka系列】Topic 与 Partition

Kafka 的 Topic&#xff08;主题&#xff09; 和 Partition&#xff08;分区&#xff09; 是数据组织的核心概念&#xff0c;它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析&#xff1a; 一、Topic 与 Partition 的映射关系 Top…

哈佛大学“零点项目”(Project Zero)简介

哈佛大学“零点项目”&#xff08;Project Zero&#xff09;简介 起源与背景 “零点项目”&#xff08;Project Zero&#xff09;由美国哲学家纳尔逊古德曼&#xff08;Nelson Goodman&#xff09;于1967年在哈佛大学教育研究院创立。名称源于“从零开始研究艺术教育”的理念&…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Java基础面经 &#x1f4da;本系列文章为个…

rebase和merge

rebase 和merge区别&#xff1a; rebase变基&#xff0c;改变基底&#xff1a;rebase会抹去提交记录。 git pull 默认merge&#xff0c;git pull --rebase 变基 rebase C、D提交属于feature分支&#xff0c;是基于master分支&#xff0c;在B提交额外拉出来的&#xff0c;当…

科研工作中如何高效利用LabVIEW

LabVIEW作为图形化编程语言&#xff0c;在科研领域广泛应用于数据采集、自动控制、信号处理等任务。如何充分发挥其优势&#xff0c;提高实验效率和数据可靠性&#xff0c;是科研工作者需要重点关注的问题。本文从软件架构、硬件选型、数据处理、调试优化等方面详细探讨LabVIEW…

MybatisPlus整合druid多数据源

1.引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version> </dependency><dependency><groupId>com.baomidou</gro…

实验6 客户端和服务器之间IPsec VPN配置

实验6 客户端和服务器之间IPsec VPN配置 1.实验目的 通过在两台计算机间或客户端与服务器之间配置IPsec VPN连接&#xff0c;掌握IPsec VPN配置方法&#xff0c;加深对IPsec协议的理解。 2.实验内容 &#xff08;1&#xff09;在Windows Server系统中配置VPN服务器。 &#xf…

VirtualBox中Ubuntu 22.04网卡配置以及解决过程中遇到的问题

1.添加网卡(仅主机) 2.启动虚拟机&#xff0c;查看新添加网卡信息 #查看网卡 ip addr # 查看网络信息&#xff0c;发现新网卡(enp0s8)未分配 ifconfig -a3.使用netplan进行网络配置 3.1 配置 DHCP获取IP # 进入netplan 文件夹 cd /etc/netplan #查看文件夹下yaml ls -al # 编…

上拉触底案例

1.什么是上拉触底 2. 修改上拉触底距离的默认值 3.上拉触底案例 上拉触底时获取随机颜色 4.添加loading效果 展示loading效果 隐藏loading效果 5.节流处理 进行节流处理&#xff0c;防止多次触底的时候&#xff0c;一次请求多页数据&#xff0c;正在请求下一页数据的时…

AES200物理机部署DeepSeek-R1蒸馏模型

AES200物理机部署DeepSeek-R1模型 华为官方官宣自己的NPU支持DeepSeek-R1模型部署&#xff0c;华为的大模型推理部署依托于其大模型推理引擎&#xff1a;MindIE&#xff0c;但是根据MindIE的文档&#xff0c;其只支持以下硬件&#xff1a; 表1 MindIE支持的硬件列表 类型配置…

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步&#xff0c;测试方法也在演变。企业需要紧跟新兴趋势&#xff0c;以提升软件质量、提高测试效率&#xff0c;并确保安全性&#xff0c;在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…

w200基于spring boot的个人博客系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

【B站保姆级视频教程:Jetson配置YOLOv11环境(十)镜像备份】

Jetson配置YOLOv11环境&#xff08;10&#xff09;镜像备份 B站视频的镜像已打包上传至百度网盘&#xff0c;镜像的硬盘空间使用量如下&#xff0c;感兴趣的小伙伴可自行下载烧录&#xff0c;需使用64g及以上的tf卡&#xff1a; (pytorch) nxnx-desktop:~$ df -h Filesystem …

了解大语言模型的基本原理(一)——Transformer工作原理

为什么选择Transformer&#xff1f; RNN&#xff1a;无法并行计算&#xff0c;不擅长处理长序列 LSTM&#xff1a;依然存在这两个问题 Transformer&#xff1a;可以并行计算&#xff0c;并且能学习输入序列里所有词的相关性和上下文关系 Tranformer优点&#xff1a; 1、注…

【Matlab优化算法-第13期】基于多目标优化算法的水库流量调度

一、前言 水库流量优化是水资源管理中的一个重要环节&#xff0c;通过合理调度水库流量&#xff0c;可以有效平衡防洪、发电和水资源利用等多方面的需求。本文将介绍一个水库流量优化模型&#xff0c;包括其约束条件、目标函数以及应用场景。 二、模型概述 水库流量优化模型…

JAVA:CloseableHttpClient 进行 HTTP 请求的技术指南

1、简述 CloseableHttpClient 是 Apache HttpComponents 提供的一个强大 HTTP 客户端库。它允许 Java 程序与 HTTP/HTTPS 服务交互&#xff0c;可以发送 GET、POST 等各种请求类型&#xff0c;并处理响应。该库广泛用于 REST API 调用、文件上传和下载等场景。 2、特性 Close…

(2024|Nature Medicine,生物医学 AI,BiomedGPT)面向多种生物医学任务的通用视觉-语言基础模型

BiomedGPT: A generalist vision–language foundation model for diverse biomedical tasks 目录 1. 摘要 2. 引言 3. 相关研究 3.1 基础模型与通用生物医学 AI 3.2 生物医学 AI 的局限性 3.3 BiomedGPT 的创新点 4. 方法 4.1 架构及表示 4.1.1 模型架构选择 4.1.2 …

使用DeepSeek实现AI自动编码

最近deepseek很火&#xff0c;低成本训练大模型把OpenAI、英伟达等股票搞得一塌糊涂。那它是什么呢&#xff0c;对于咱们程序员编码能有什么用呢&#xff1f;DeepSeek 是一款先进的人工智能语言模型&#xff0c;在自然语言处理和代码生成方面表现出色。它经过大量代码数据训练&…

Linux之Https协议原理

Linux之Https协议原理 一.Https协议的概念二.常见的加密方法三.数据摘要&#xff08;数字指纹&#xff09;四.Https协议加密方法的逐渐完善4.1使用对称或者非对称加密4.2增加CA证书 一.Https协议的概念 Https协议是基于Http协议延申出的一种应用层协议&#xff0c;其原理就是在…

基于Java的在线购物系统的设计与实现

引言 课题背景 随着Internet国际互联网的发展&#xff0c;越来越多的企业开始建造自己的网站。基于Internet的信息服务&#xff0c;商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强…