蓝桥杯 第 2 场 小白入门赛

news2024/11/15 8:58:46

目录

1.蓝桥小课堂-平方和

2.房顶漏水啦

3.质数王国

4.取余

5.数学尖子生

6.魔术师


比赛链接

1.蓝桥小课堂-平方和

简单签到直接按照题目处理即可注意开long long

void solve(){
	
	LL x; cin>>x;
	LL ans= x*(x+1)*(2*x+1)/6;
	cout<<ans<<endl;
}

2.房顶漏水啦

覆盖正方形的操作我们需要看的是最远的两端即可,所以只需要看长度和宽度的最大值来覆盖即可

void solve(){
	
	cin>>n>>m;
	LL mix=1e18,miy=1e18,Max=-1e18,May=-1e18;
	while(m--){
		LL x,y; cin>>x>>y;
		mix=min(x,mix);
		Max=max(Max,x);
		miy=min(miy,y);
		May=max(May,y);
	}
	
	LL ans = max((Max-mix+1),(May-miy+1));
	
	cout<<ans<<endl;
}

3.质数王国

我们可以先使用线性筛处理出所有的质数,接着对两个质数的中间的数进行左右变化处理最小值即可预处理o(n),然后直接求解即可

int cnt;
int primes[N];

void solve(){
	
	cin>>n;
	
	auto get = [&](){
		bitset<N> st;
		for(int i=2;i<N;i++){
			if(!st[i]) primes[cnt++]=i;
			for(int j=0;primes[j]<=N/i;j++){
				st[i*primes[j]]=true;
				if(i%primes[j]==0) break;
			}
		}
	};
	
	get();
	
	vector<int> dp(N);
	dp[0]=2,dp[1]=1;
	
	for(int i=1;i<cnt;i++){
		for(int x=primes[i-1]+1;x<primes[i];x++){
			dp[x]=min(x-primes[i-1],primes[i]-x);
		}
	}
	LL ans=0;
	while(n--){
		int x; cin>>x;
		ans+=dp[x];
	}
	cout<<ans<<endl;
}

4.取余

依照数据范围我们应该是要在o(n)的处理下得到答案,也就是要用到数学知识,我们可以从最开始的 S<=mod<=T这个区间去+b(1-B)这样范围的数,但是时间过高不可取,所以我们考虑使用区间的特性,我们可以转化为(<=T)-(<=S-1)就可以得到在中间这个区间的方案数量.

我们接着枚举b的大小

1.b<=u+1则无论a取多少都可以(a%b<=u)

2.b>u+1则A/i*(u+1)+min(A%i,u); 对于倍数的累加然后加上剩余的即可

void solve(){
	
	LL A,B,S,T; cin>>A>>B>>S>>T;
	
	auto get = [&](LL u){
		LL res=0;
		if(u<0) return res;
		for(int i=1;i<=B;i++){
			if(i<=u+1) res+=A;
			else res+=A/i*(u+1)+min(A%i,u);
		}
		return res;
	};
	
	cout<<get(T)-get(S-1)<<endl;
}

5.数学尖子生

依照题目意思如果我们要找到f(a)=b那么a一定是lcm\sum_{i}^{b-1}的倍数,基于这个点我们来处理问题,同时他不是lcm\sum_{i}^{b}的倍数的话,我们可以想到那就是做差就是剩下的满足要求的,也就是容斥原理\frac{sum}{lcm\sum_{i}^{b-1}}-\frac{sum}{lcm\sum_{i}^{b}}同时需要注意的是考虑数据范围很可能超过,对于超过的话就是0我们再进行特殊处理即可

LL lcm(LL a,LL b){
	return a/__gcd(a,b)*b;
}

void solve(){
	
	vector<LL>  lc(N);
	
	auto get = [&](){
		lc[0]=1;
		for(int i=1;i<N;i++){
			lc[i]=lcm(i,lc[i-1]);
			if(lc[i]>1e16){
				lc[i]=0; break;
			}
		}	
	};
	
	get();
	
	cin>>t;
	while(t--){
		LL n,m;
		cin>>n>>m;
		if(n==1||lc[n-1]==0){
			cout<<0<<endl;
			continue;
		}
		LL ans=m/lc[n-1]-(lc[n] ? m/lc[n] : 0);
		cout<<ans<<endl;
	}	
	
}

6.魔术师

我们可以发现他具有鲜明的区间修改和变化的操作但是他和我们平常的线段树不同他具有几个物品之间的切换之类的操作,对于这些变化,我们线段树变化的核心在于lazy如何修改我们可以在线段树中用懒标记来维护他们之间的关系,如果是翻倍的话也就是自己和自己的关系,关系如何传递,所以我们用二维数组来充当懒标记来处理,然后再用数组进行pushdown的操作来维护

int t,n,m;
int op,ql,qr,A,B;

int add[N*4][3][3],a[N*4][3],now[3][3];

void pushup(int u){
	for(int i=0;i<3;i++) a[u][i]=(a[u<<1][i]+a[u<<1|1][i])%mod; 
}

void lazy(int a[3][3],int b[3][3]){
	int c[3][3];
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++){
			c[i][j]=0;
			for(int k=0;k<3;k++){
				c[i][j]=(c[i][j]+(LL)a[i][k]*b[k][j]%mod)%mod;
			}
		}
	// 记录下来关系的传递
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			a[i][j]=c[i][j];
}
void down(int a[3],int b[3][3]){
	// 这个区间直接修改
	int c[3];
	for(int j=0;j<3;j++){
		c[j]=0;
		for(int k=0;k<3;k++){
			c[j]=(c[j]+(LL)a[k]*b[k][j]%mod)%mod;
		}
	}
	for(int i=0;i<3;i++) a[i]=c[i];
}

void build(int u,int l,int r){
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			add[u][i][j]=(i==j);// 表示lazy
	if(l==r){
		int x; cin>>x;
		x--;
		a[u][x]=1;
		return ;
	}	
	int mid=l+r>>1;
	build(u<<1,l,mid),build(u<<1|1,mid+1,r);
	pushup(u);
}

void modify(int u,int l,int r){
	if(ql<=l && r<=qr){// 找到需要修改的区间
		lazy(add[u],now);// 然后加入懒标记
		down(a[u],now);
		return ;
	}
	lazy(add[u<<1],add[u]);
	lazy(add[u<<1|1],add[u]);
	down(a[u<<1],add[u]);
	down(a[u<<1|1],add[u]);
	
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			add[u][i][j]=(i==j);// 表示这个区间的lazy用完了恢复
			
	int mid=l+r>>1;
	if(ql<=mid) modify(u<<1,l,mid);
	if(qr>mid) modify(u<<1|1,mid+1,r);
	pushup(u);
}

void solve(){
   
    cin>>n>>m;
    build(1,1,n);
    while(m--){
     	cin>>ql>>qr>>op>>A; A--;
     	memset(now,0,sizeof now);// 表示传递的性质   1->1 自己到自己等于没有标记
     	// 表示是否具有标记的传递
     	for(int i=0;i<3;i++) now[i][i]=1;
     	if(op==3){
     		now[A][A]=2;// 自己到自己乘以2
     	}
     	else{
     		cin>>B; B--;
     		if(op==1) now[A][A]=now[B][B]=0,now[A][B]=now[B][A]=1;
     		else now[A][A]=0,now[A][B]=1;
     	}
     	modify(1,1,n);
     	for(int i=0;i<3;i++) cout<<a[1][i]<<' ';
     	cout<<endl;
    }
    return ;
}

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

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

相关文章

STM32——DMA

STM32——DMA 1.DMA介绍 什么是DMA&#xff1f; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&…

C语言应用实例——贪吃蛇

&#xff08;图片由AI生成&#xff09; 0.贪吃蛇游戏背景 贪吃蛇游戏&#xff0c;最早可以追溯到1976年的“Blockade”游戏&#xff0c;是电子游戏历史上的一个经典。在这款游戏中&#xff0c;玩家操作一个不断增长的蛇&#xff0c;目标是吃掉出现在屏幕上的食物&#xff0c…

shell - 免交互

一.Here Document 免交互 1. 交互的概念 交互&#xff1a;当计算机播放某多媒体程序的时候&#xff0c;编程人员可以发出指令控制该程序的运行&#xff0c;而不是程序单方面执行下去&#xff0c;程序在接受到编程人员相应的指令后而相应地做出反应。 对于Linux操作系统中&…

【RT-DETR有效改进】Bi-FPN高效的双向特征金字塔网络(附yaml文件+完整代码)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是BiFPN双向特征金字塔网络,其是一种特征融合层的结构,也就是我们本文改进RT-DETR模型中的Neck部分,它的主要思想是通过多层级的特征金字塔和双向信息传递来提高精度。本文给大家带…

零基础爬什么值得买的榜单——爬虫练习题目一(答一)

完蛋 蚌埠住了 引言日常吐槽言归正传 步骤一分析网页分析网络加载详细说说网络面板实际操作 测试代码测试结果知识点JS和Fetch/XHR是什么&#xff1f;有什么关联&#xff1f;网页数据的中文为什么是16进制数&#xff0c;以及如何判断&#xff1f; 结尾 引言 日常吐槽 今天剪辑…

力扣题目训练(5)

2024年1月29日力扣题目训练 2024年1月29日力扣题目训练345. 反转字符串中的元音字母349. 两个数组的交集350. 两个数组的交集 II96. 不同的二叉搜索树97. 交错字符串44. 通配符匹配 2024年1月29日力扣题目训练 2024年1月29日第五天编程训练&#xff0c;今天主要是进行一些题训…

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于OOA-LSSVM鱼鹰算法优化最小…

Windows断开映射磁盘提示“此网络连接不存在”,并且该磁盘直在资源管理器中

1、打开注册表编辑器 快捷键winR 打开“运行”&#xff0c; 输入 regedit 2、 删除下列注册表中和无法移除的磁盘相关的选项 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\ 3、打开“任务管理器”&#xff0c;重新启动“Windows资源…

C++指针比较

内存中各个数据的存放方式。 数组str1、str2、str3、str4都是在栈中分配的&#xff0c;内存中的内容都为“abc”加一个“\0”&#xff0c;但是他们的位置是不同的&#xff0c;因此代码第15行和第16行输出的都是0. 指针str5、str6、str7、str8也是在栈中分配的&#xff0c;他们…

Shell中的awk

一、awk 1.1.awk工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 awk倾向于将一行分成多个"字段"然后再进行处理。 awk信息的读入也是逐行读取…

Apple Vision Pro 评测:这款顶尖头显仅是对未来的初步探索

原文&#xff1a;Apple Vision Pro Review: The Best Headset Yet Is Just a Glimpse of the Future 作者&#xff1a;Joanna Stern 戴上 Apple Vision Pro 混合现实头显整整近 24 小时后&#xff0c;有几件事让我颇感意外&#xff1a; 我居然没感到恶心。我竟然高效完成了大…

springboot---四大核心

四大核心 Starter简介总结 Autoconfigure简介示例原理自定义starter打包实践 总结 CLIActuator Starter 简介 springboot项目中几乎项目依赖中基本上全是各种各样的starter, 那么到底什么是starter? starter是一组方便的依赖描述符&#xff0c;当我们使用它时&#xff0c;可…

推荐系统|排序_多目标模型

文章目录 四大特征用户特征物品特征统计特征场景特征 训练过程中会遇到的问题 四大特征 ID相当于是人拥有的身份证&#xff0c;能够唯一确定出一个人 用户特征 主要指的是用户ID和用户画像 物品特征 主要是指物品ID和物品画像以及物品持有人。 统计特征 统计特征既包括对…

Java并发基础:CompletionService全面解析!

内容概要 CompletionService的优点在于能够解耦任务提交与结果获取&#xff0c;有效的整合线程池与阻塞队列&#xff0c;实现任务完成顺序的处理&#xff0c;提升系统吞吐量&#xff0c;它简化了多线程编程的复杂性&#xff0c;使开发者能够更专注于业务逻辑&#xff0c;而不必…

【昕宝爸爸小模块】深入浅出详解之常见的语法糖

深入浅出详解之常见的语法糖 一、&#x1f7e2;关于语法糖的典型解析二、&#x1f7e2;如何解语法糖&#xff1f;2.1&#x1f7e2;糖块一、switch 支持 String 与枚举2.2&#x1f4d9;糖块二、泛型2.3&#x1f4dd;糖块三、自动装箱与拆箱2.4&#x1f341;糖块四、方法变长参数…

TOP100 矩阵

1.73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n < 200-2^31 < matrix[i][j] < 2^31 - 1 思路&#xf…

宏景eHR FrCodeAddTreeServlet SQL注入漏洞复现

前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

【排序算法】C语言实现随机快排,巨详细讲解

文章目录 &#x1f680;前言&#x1f680;快排的核心过程partition&#xff08;划分过程&#xff09;&#x1f680;快排1.0&#x1f680;随机快速排序&#x1f680;稳定性 &#x1f680;前言 铁子们好啊&#xff01;继续我们排序算法今天要讲的是快排&#xff0c;通常大家所说…

❤搭建一个Springboot项目(ltbjava)

❤从0实现一个项目 搭建好我们的java环境和运行的IDEA软件以后&#xff0c;接下来我们就应该实现一个自己的项目了 0 项目描述 基于jdk17 的学习&#xff0c;因为据说最新的spring框架的最低要求是jdk17Maven 3.8.7PS&#xff1a;springboot3.0版本以上必须用jdk171、 项目创…

STM32F407移植OpenHarmony笔记6

继上一篇笔记&#xff0c;编译好STM32的裸机程序&#xff0c;能点亮LED灯了。 下一步就是启动liteos_m内核了。 不过为了更好的调试代码&#xff0c;需要先把printf重定向到串口&#xff0c;基于gcc的printf重定向和Keil不一样。 直接新建printf.c&#xff0c;在里面重写printf…