【蓝桥杯集训·周赛】AcWing 第96场周赛

文章目录

  • 第一题 AcWing 4876. 完美数
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 第二题 AcWing 4877. 最大价值
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 第三题 AcWing 4878. 维护数组
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解

第一题 AcWing 4876. 完美数

一、题目

1、原题链接

4876. 完美数

2、题目描述

如果一个正整数能够被 2520 整除,则称该数为完美数。

给定一个正整数 n,请你计算 [1,n] 范围内有多少个完美数

输入格式

一个整数 n。

输出格式

一个整数,表示 [1,n] 范围内完美数的个数。

数据范围

前 3 个测试点满足 1≤n≤3000
所有测试点满足 1≤n≤1018

输入样例

3000

输出样例

1

二、解题报告

1、思路分析

(1)注意数据范围要开long long
(2)因为能够被2520整除的是2520的倍数,所以当前n是2520的多少倍(下取整),即存在多少个能够被2520整除的数。

2、时间复杂度

时间复杂度为O(1)

3、代码详解

#include <iostream>
using namespace std;
typedef long long LL;
LL n;
int main()
{ cin>>n;  
  cout<<n/2520;
  return 0;
}

第二题 AcWing 4877. 最大价值

一、题目

1、原题链接

4877. 最大价值

2、题目描述

有一个容量为 n 的背包和 m+1 种物品,每种物品都有无限多个。

物品种类编号为 0∼m。

第 i 种物品的体积为 vi,价值为 wi。

在使用背包装入物品时,每种物品的限重如下:

  • 第 0 种物品:重量忽略不计,在装入时没有重量限制。
  • 第 1∼m 种物品:第 i 种物品的单个重量为 hi,如果该种物品的装入总重量超过 li,则视为超重。

现在,请你挑选物品装入背包,要求

  • 所有装入物品的总体积不得超过背包容量。
  • 所有存在重量限制的物品均不得超重。
  • 满足以上所有条件的前提下,所有装入物品的总价值尽可能大。

输出总价值的最大可能值

注意审题,不要将 n,m 的含义弄混。

输入格式

第一行包含四个整数 n,m,v0,w0。

接下来 m 行,每行包含四个整数 li,hi,vi,wi。

输出格式

一个整数,表示总价值的最大可能值。

数据范围

前 4 个测试点满足 1≤n≤100,1≤m≤2
所有测试点满足 1≤n≤1000,1≤m≤10,1≤li,hi,vi,wi≤100

输入样例1

10 2 2 1
7 3 2 100
12 3 1 10

输出样例1

241

输入样例2

100 1 25 50
15 5 20 10

输出样例2

200

二、解题报告

1、思路分析

思路来源:y总讲解视频
y总yyds

(1)装入第0个物品相当于是0-1背包问题,而装入后面物品相当于是多重背包问题(也可以直接看成多重背包问题,将第一个物品的数量设置为正无穷)。
(2)按照上述思路进行求解即可。

2、时间复杂度

时间复杂度为O(n2)

3、代码详解

法1

#include <iostream>
#include <algorithm>
using namespace std;
const int N=1010;
int dp[N],w[N],v[N],l[N],h[N];
int n,m;
int main(){
    cin>>n>>m>>v[0]>>w[0];
    for(int i=1;i<=m;i++) cin>>l[i]>>h[i]>>v[i]>>w[i];
    //完全背包,处理第0件物品
    for(int j=v[0];j<=n;j++) dp[j]=max(dp[j],dp[j-v[0]]+w[0]);
    //多重背包,处理后面物品
    for(int i=1;i<=m;i++){
        for(int j=n;j>=v[i];j--){
            for(int k=0;k*v[i]<=j&&k<=l[i]/h[i];k++){
                dp[j]=max(dp[j],dp[j-k*v[i]]+k*w[i]);
            }
        }
    }
    cout<<dp[n];
    return 0;
}

法2

#include <iostream>
#include <algorithm>
using namespace std;
const int N=1010;
int v[N],w[N],l[N],h[N];
int dp[N];
int n,m;
int main()
{ cin>>n>>m>>v[0]>>w[0];
  l[0]=0x3f3f3f3f,h[0]=1;    //初始化第0件物品可以装无限个,即l[0]/h[0]=正无穷
  for(int i=1;i<=m;i++){
  	cin>>l[i]>>h[i]>>v[i]>>w[i];
  }
  //转化成多重背包问题求解
  for(int i=0;i<=m;i++){
  	for(int j=n;j>=0;j--){
  	    for(int k=0;k<=l[i]/h[i]&&k*v[i]<=j;k++)
  		dp[j]=max(dp[j],dp[j-k*v[i]]+k*w[i]);	
	  }
  }
  cout<<dp[n];
  return 0;
}

第三题 AcWing 4878. 维护数组

一、题目

1、原题链接

4878. 维护数组

2、题目描述

给定一个长度为 n 的整数序列 d1,d2,…,dn 以及三个整数 k,a,b。

初始时,所有 di 均为 0。

你需要对序列依次进行 q 次操作,操作分为以下两种:

  • 1 x y,将 dx 增加 y。
  • 2 p计算并输出在这里插入图片描述

输入格式

第一行包含 5 个整数 n,k,a,b,q。

接下来 q 行,每行描述一个操作,格式如题面所述。

输出格式

每个 2 p 操作,输出一行一个整数表示结果。

数据范围

前 3 个测试点满足 1≤k≤n≤10,1≤q≤10
所有测试点满足 1≤k≤n≤2×105,1≤b<a≤10000 ,1≤q≤2×105,1≤x≤n,1≤y≤10000,1≤p≤n−k+1

输入样例1

5 2 2 1 8
1 1 2
1 5 3
1 2 1
2 2
1 4 2
1 3 2
2 1
2 3

输出样例1

3
6
4

输入样例2

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

输出样例2

7
1

二、解题报告

1、思路分析

思路来源:y总讲解视频
y总yyds

(1)利用两个树状数组分别维护min(d[i],b)min(d[i],a)
(2)

  • tr1[]维护min(d[i],b):即针对每次add()操作,始终保持tr1[]维护的数组(设为B[],每个d[i]对应B[i],即B[]对应的树状数组为tr1[],而且B[]中的数均小于等于b),即如果当d[x]小于b的时候需要判断d[x]+y以之后的值与b的大小关系:如果d[x]+y<=b,则保留该增值(即让对应d[x]B[x]中的数的值B[x]+y);如果d[x]+y>b,由于我们不能使维护的数组B[]中的数大于b,所以我们最多只能让其增加到b(即让B[x]增加它距离b的差值b-d[x],也就是让他对应的维护的数组的值B[x]只增加到b)。如果此时d[x]>=b,我们不再需要对维护的数组B[X]进行增值操作,因为其对应的B[x]中的值已经达到b,无论对d[x]增加多少都不会影响B[x]
  • tr2[]维护min(d[i],a),同理。

(3)问题所求即为:tr1[][1,p-1]的区间和+tr2[][p+k,n]的区间和。

2、时间复杂度

时间复杂度为O(nlogn)

3、代码详解

#include <iostream>
#include <algorithm>
using namespace std;
const int N=200010;
typedef long long LL;
int d[N],tr1[N],tr2[N];
int n,k,a,b,q;
//lowbit运算
int lowbit(int x){
	return x&-x;
}
//点更新,在tr[x]位置加c
void add(int tr[],int x,int c){
	for(int i=x;i<=n;i+=lowbit(i)){
		tr[i]+=c;
	}
}
//求[1,x]前缀和
int query(int tr[],int x){
	LL ans=0;
	for(int i=x;i;i-=lowbit(i)){
		ans+=tr[i];
	}
	return ans;
}
//求[i,j]区间和
int sum(int tr[],int i,int j){
	return query(tr,j)-query(tr,i-1);
}
int main()
{ cin>>n>>k>>a>>b>>q;
  while(q--){
  	int op;
  	cin>>op;
  	if(op==1){
  	   int x,y;
	   cin>>x>>y;
	   if(d[x]<=b) add(tr1,x,d[x]+y>=b?b-d[x]:y);    //维护min(d[i],b)
	   if(d[x]<=a) add(tr2,x,d[x]+y>=a?a-d[x]:y);    //维护min(d[i],a)
	   d[x]+=y;
	}
	else{
		int p;
		cin>>p;
		LL ans=sum(tr1,1,p-1)+sum(tr2,p+k,n);    //求题目两个区间和
		cout<<ans<<endl;
	} 
  }
  return 0;
}

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

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

相关文章

路由策略实验

运行OSPF协议 [R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 192.168.12.1 0.0.0.0 [R1-ospf-1-area-0.0.0.0]network 192.168.13.1 0.0.0.0 [R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 192.168.…

抖音seo矩阵系统源码搭建技术+二开开源代码定制部署

抖音已经成为了当今最为流行的短视频平台之一&#xff0c;拥有着庞大的用户群体和海量的视频资源。对于一些商家或者运营者来说&#xff0c;如何从这些视频资源中挖掘出有效的信息&#xff0c;进而提升自己的品牌、产品或者内容的曝光度&#xff0c;就成为了一个非常重要的问题…

一次通过.frm和.ibd恢复mysql数据表的过程

1、导出.frm和.ibd文件 2、安装Mysql的Utilities 3、执行命令&#xff08;实际恢复的表&#xff09; mysqlfrm --diagnostic ./stat_vehicle_mileage.frm4、复制Sql&#xff0c;添加ROW_FORMATCOMPACT&#xff08;需要检测生成的Sql语句是否可用&#xff09; CREATE TABLE …

Android开发-Android常用组件-ProgressBar进度条

4.8 ProgressBar进度条 常用属性 android:max 进度条的最大值 android:progress 进度条已完成进度值 android:progressDrawable 设置轨道对应的Drawable对象 android:indeterminate 如果设置成true&#xff0c;则进度条不精确显示进度 android:indeterminateDrawable …

YOLO算法改进指南【算法解读篇】:2.如何训练自己的数据集

我们接着上一篇文章配置完YOLOv5需要的环境后,今天我们试着用YOLOv5训练自己的数据。(在开始本教程前,记得先跑一遍入门篇,确保环境是正常的) 有图有真相,先看看我的运行结果 【YOLOv5 源码地址】 🚀 我的环境: 语言环境:Python3.8编译器:PyCharm深度学习环境: to…

2021蓝桥杯真题格点(填空题) C语言/C++

问题描述 如果一个点(x,y) 的两维坐标都是整数, 即 x∈Z 且 y∈Z, 则称这个点为 一个格点。 如果一个点 (x,y) 的两维坐标都是正数, 即 x>0 且 y>0, 则称这个点在 第一象限。 请问在第一象限的格点中, 有多少个点(x,y) 的两维坐标乘积不超过 2021 , 即x⋅y≤2021 。 掟…

c#之反射详解

总目录 文章目录总目录一、反射是什么&#xff1f;1、C#编译运行过程2、反射与元数据3、反射的优缺点二、反射的使用1、反射相关的类和命名空间1、System.Type类的应用2、System.Activator类的应用3、System.Reflection.Assembly类的应用4、System.Reflection.Module类的应用5、…

SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理

SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理前言添加依赖配置文件编写监听器创建SimpleRabbitListenerContainerFactory发送消息前言 RabbitMQ是一种常用的消息队列&#xff0c;Spring Boot对其进行了深度的整合&#xff0c;可以快速地实现消息的发送和接收…

PCB模块化设计16——RS232,RS485接口模块PCB布局布线设计规范

目录PCB模块化设计16——RS232&#xff0c;RS485接口模块PCB布局布线设计规范RS232接口模块1、接口概述2、接口电路 原理图的EMC设计3、连接器设计4、线缆设计5、RS-232常规管脚定义&#xff1a;6、RS-232知识要点RS485接口模块1、原理图设计方案1、RS485接口6KV防雷电路设计方…

c语言程序笔记(1)

C语言笔记&#xff08;1&#xff09;——B站翁恺视频 程序框架 #include <stdio.h> int main() {//printf("hello world!\n");return 0; }1、变量与常量。 例子1&#xff1a; #include <stdio.h> int main() {printf("1234%d",1234);return …

图解LeetCode——合并两个有序链表

如果你喜欢这篇文章的话&#xff0c;请给作者点赞关注哟&#xff0c;你的支持是我不断前进的动力&#xff01; 目录 题目描述&#xff1a; 解法&#xff1a; 完整代码&#xff1a; 结果 题目链接&#xff1a;力扣 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序…

2017世界互联网领先成果来了 光量子计算机

演讲者&#xff1a;陆朝阳中国科学技术大学教授 发布了世界上首台超越早期经典计算机的光量子计算机 陆朝阳&#xff1a;很高兴向大家报告中国科学院在量子计算这个领域取得的基础性的研究成果。 我们知道50多年以来摩尔定律一直见证着计算机的更新换代&#xff0c;之前每过18个…

【新2023Q2模拟题JAVA】华为OD机试 - 绘图机器

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:绘图机器 题目 绘图机器的绘…

读书笔记-纳瓦尔宝典-2023.04.01

重点 财富 如何构造高价值信息 判断力 何为幸福 启发 最近看了这本书的大部分内容&#xff0c;感悟颇多&#xff0c;及时记录下来。 因为是快速阅读&#xff0c;还未做深入思考和实践&#xff0c;但对总体的内容有一个大致把握&#xff0c;未来会结合行动反复阅读和思考&…

python画爱心代码

前几天在网上看到了一个画爱心的教程&#xff0c;就是在 Python里面画一个爱心&#xff0c;但是我在网上找到的代码不是很好用&#xff0c;所以我就自己写了一遍。 首先我们先创建一个新的 python文件。新建一个 python文件夹&#xff0c;将我们之前的那个 python文件夹复制到这…

蓝桥杯·3月份刷题集训Day03

本篇博客旨在记录自已打卡蓝桥杯3月份刷题集训&#xff0c;同时会有自己的思路及代码解答希望可以给小伙伴一些帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误之处&#xff0c;希望小伙伴们可以在评论区指出来&#xff0c;共勉&#x1f4aa;。 文…

2021年第十二届蓝桥杯省赛Java B组真题及详细题解

A试题 : ASC【填空题】 本题总分&#xff1a; 5 分 【1、问题描述】 已知大写字母 A 的 ASCII 码为 65&#xff0c;请问大写字母 L 的 ASCII 码是多少&#xff1f; 【2、答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个整数&#…

二十、Javascript API(一)

1. Atomics和SharedArrayBuffer 多个上下文访问 SharedArrayBuffer时&#xff0c;如果同时对缓冲区执行操作&#xff0c;就可能出现资源争用问题。Atomics API 通过强制同一时刻只能对缓冲区执行一个操作&#xff0c;可以让多个上下文安全地读写一个SharedArrayBuffer。 1.1 …

Android HTTP请求方式

1.HttpClient使用流程 基本流程&#xff1a; 2.HttpClient使用示例 1&#xff09;使用HttpClient发送GET请求 直接贴下简单的发送Get请求的代码&#xff1a; public class MainActivity extends Activity implements OnClickListener { private Button btnGet; private WebV…

STM-32:GPIO 输出-点亮LED-流水灯-蜂鸣器

目录一、GPIO1.1GPIO简介1.2GPIO 硬件解析1.2.1保护二极管1.2.2 P-MOS、N-MOS 管1.2.3数据输入输出寄存器1.2.4复用功能输出1.2.5模拟输入输出1.3GPIO 的工作模式1.3.1 输入模式 (模拟/浮空/上拉/下拉)1.3.2 输出模式 (推挽/开漏)1.3.3 复用功能 (推挽/开漏)1.3.4 小结二、GPIO…