蓝桥杯第十四届C++A组(未完)

news2024/12/24 20:34:17

【规律题】平方差

题目描述

给定 L, R,问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 x=y^{2}-z^{2}

输入格式

输入一行包含两个整数 L, R,用一个空格分隔。

输出格式

输出一行包含一个整数满足题目给定条件的 x 的数量。

样例输入

1 5

样例输出

4

提示

1=1^{2}-0^{2}

3=2^{2}-1^{2}

4=2^{2}-0^{2}

5=3^{2}-2^{2}

对于 40% 的评测用例,LR ≤ 5000 ;

对于所有评测用例,1 ≤ L ≤ R ≤ 10^9 。


x=y^{2}-z^{2}x=(y+z)*(y-z)

m=(y+z),n=(y-z) ,则x=m*n,解得:y=\frac{m+n}{2},z=\frac{m-n}{2}

要使y和z有整数解,那么(m+n),(m-n) 为偶数,

(1)偶数+偶数=偶数,偶数-偶数=偶数;

(2)奇数+奇数=偶数,奇数-奇数=偶数;

则m和n奇偶性相同,即如果x有一对因子奇偶性相同,那么一定可以找到y,z满足x=y^{2}-z^{2}

(1)若m,n都为偶数,那么m是2的倍数,n是2的倍数,那么m*n一定是4的倍数。

(2)若m,n都为奇数,那么由性质 奇数*奇数=奇数 得,m*n也一定为奇数。

综上 x 是四的倍数或者奇数。


#include<iostream>
#include<cstring>
#include<map>
#include<vector>
#include<cmath>
using namespace std;
typedef long long LL;
const int N=10010;
int main(){
	LL L,R;
	cin>>L>>R;
	int cnt=0;
	for(LL i=L;i<=R;i++){
		if(i%4==0||i%2){
			cnt++;
		}
	}
	cout<<cnt<<endl;
	return 0;
}

更小的数

题目描述

蓝桥杯2023年第十四届省赛真题-更小的数

小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串,下标从 0 到 n − 1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字 numnew 满足条件 numnew < num,请你帮他计算下一共有多少种不同的子串选择方案,只要两个子串在 num 中的位置不完全相同我们就视作是不同的方案。

注意,我们允许前导零的存在,即数字的最高位可以是 0 ,这是合法的。

输入格式

输入一行包含一个长度为 n 的字符串表示 num(仅包含数字字符 0 ∼ 9),

从左至右下标依次为 0 ∼ n − 1。

输出格式

输出一行包含一个整数表示答案。

样例输入

210102

样例输出

8

提示

一共有 8 种不同的方案:

1)所选择的子串下标为 0 ∼ 1 ,反转后的 numnew = 120102 < 210102 ;

2)所选择的子串下标为 0 ∼ 2 ,反转后的 numnew = 012102 < 210102 ;

3)所选择的子串下标为 0 ∼ 3 ,反转后的 numnew = 101202 < 210102 ;

4)所选择的子串下标为 0 ∼ 4 ,反转后的 numnew = 010122 < 210102 ;

5)所选择的子串下标为 0 ∼ 5 ,反转后的 numnew = 201012 < 210102 ;

6)所选择的子串下标为 1 ∼ 2 ,反转后的 numnew = 201102 < 210102 ;

7)所选择的子串下标为 1 ∼ 4 ,反转后的 numnew = 201012 < 210102 ;

8)所选择的子串下标为 3 ∼ 4 ,反转后的 numnew = 210012 < 210102 ;

对于 20% 的评测用例,1 ≤ n ≤ 100 ;

对于 40% 的评测用例,1 ≤ n ≤ 1000 ;

对于所有评测用例,1 ≤ n ≤ 5000 。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<vector>
#include<cmath>
using namespace std;
typedef long long LL;
int main(){
	string s;
	cin>>s;
	int n=s.size();
	int cnt=0;
	for(int i=0;i<n-1;i++){
		for(int j=n-1;j>i;j--){
			if(s[i]>s[j]) cnt++;
			else if(s[i]==s[j]){
				for(int x=i,y=j;x<y;x++,y--){
					if(s[x]>s[y]){
						cnt++;
						break;
					}else if(s[x]<s[y]) break;
				}
			}
		}
	}
	cout<<cnt<<endl;
	return 0;
}

【DFS】颜色平衡树

题目描述

给定一棵树,结点由 1 至 n 编号,其中结点 1 是树根。树的每个点有一个颜色 Ci。

如果一棵树中存在的每种颜色的结点个数都相同,则我们称它是一棵颜色平衡树。

求出这棵树中有多少个子树是颜色平衡树。

输入格式

输入的第一行包含一个整数 n ,表示树的结点数。

接下来 n 行,每行包含两个整数 Ci , Fi,用一个空格分隔,表示第 i 个结点的颜色和父亲结点编号。

特别地,输入数据保证 F1 为 0 ,也即 1 号点没有父亲结点。保证输入数据是一棵树。

输出格式

输出一行包含一个整数表示答案。

样例输入

6
2 0
2 1
1 2
3 3
3 4
1 4

样例输出

4

提示

编号为 1, 3, 5, 6 的 4 个结点对应的子树为颜色平衡树。

对于 30% 的评测用例,n ≤ 200,Ci ≤ 200 ;

对于 60% 的评测用例,n ≤ 5000,Ci ≤ 5000 ;

对于所有评测用例,1 ≤ n ≤ 200000,1 ≤ Ci ≤ 200000,0 ≤ Fi < i 。

#include<iostream>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
const int N=2e5+10;
int c[N];
int ans=0;
int n;
vector<int> g[N];
void add(map<int,int> &cnt,map<int,int> &cnt_nb){
	for(auto mp:cnt_nb){
		int x=mp.first;
		int y=mp.second;
		cnt[x]+=y;
	}
}
map<int,int> dfs(vector<int> *g,int *c,int i){
	int sz=g[i].size();
	map<int,int> cnt;
	if(sz==0){
		cnt[c[i]]=1;
		ans++;
		return cnt;
	}
	cnt[c[i]]=1;
	for(int j=0;j<sz;j++){
		int nb=g[i][j];
		map<int,int> cnt_nb=dfs(g,c,nb);
		add(cnt,cnt_nb);
	}
	int num=cnt[c[i]];
	for(auto mp:cnt){
		int count=mp.second;
		if(count!=num) return cnt;
	}
	ans++;
	return cnt;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		int f;
		cin>>c[i]>>f;
		if(f>=1) g[f-1].push_back(i);
	}
	dfs(g,c,0);
	cout<<ans<<endl;
	return 0;
}

【DFS】(选不选)买瓜

题目描述

小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。

小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。

小蓝希望买到的瓜的重量的和恰好为 m 。

请问小蓝至少要劈多少个瓜才能买到重量恰好为 m 的瓜。如果无论怎样小蓝都无法得到总重恰好为 m 的瓜,请输出 −1 。

输入格式

输入的第一行包含两个整数 n, m,用一个空格分隔,分别表示瓜的个数和小蓝想买到的瓜的总重量。

第二行包含 n 个整数 Ai,相邻整数之间使用一个空格分隔,分别表示每个瓜的重量。

输出格式

输出一行包含一个整数表示答案。

样例输入

3 10
1 3 13

样例输出

2

提示

对于 20% 的评测用例,∑n≤10;

对于 60% 的评测用例,∑n≤20;

对于所有评测用例,1 ≤n≤30,1≤ Ai ≤ 10^9 ,1 ≤ m ≤ 10^9

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=35,INF=0x3f3f3f3f;
LL p[N];
LL a[N];
int n;
LL m;
int ans=INF;
void dfs(int u,LL sum,int cnt){
	if(sum==m){
		ans=min(ans,cnt);
		return ;
	}
	if(cnt>=ans||u>n||sum+p[u]<m||sum>m) return ;
	dfs(u+1,sum+a[u],cnt);
	dfs(u+1,sum+a[u]/2,cnt+1);
	dfs(u+1,sum,cnt);
}
int main(){
	cin>>n>>m;
	m*=2;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		a[i]*=2;
	}
	sort(a+1,a+1+n,greater<int>());
	for(int i=n;i>=1;i--) p[i]=p[i+1]+a[i];
	dfs(1,0,0);
	if(ans==INF) cout<<"-1"<<endl;
	else cout<<ans<<endl;
	return 0;
}

网络稳定性(X)

异或和之和

题目描述

给定一个数组 Ai,分别求其每个子段的异或和,并求出它们的和。或者说,对于每组满足 1 ≤ L ≤ R ≤ n 的 L, R ,求出数组中第 L 至第 R 个元素的异或和。然后输出每组 L, R 得到的结果加起来的值。

输入格式

输入的第一行包含一个整数 n 。

第二行包含 n 个整数 Ai ,相邻整数之间使用一个空格分隔。

输出格式

输出一行包含一个整数表示答案。

样例输入

5
1 2 3 4 5

样例输出

39

提示

对于 30% 的评测用例,n ≤ 300 ;
对于 60% 的评测用例,n ≤ 5000 ;
对于所有评测用例,1 ≤ n ≤ 105,0 ≤ Ai ≤ 2^20 。

区间[l,r]的异或和可以表示为S_{r}\bigoplus S_{l-1},这样原问题就变成了:求n+1个数两两异或之和,如果S_{i}的二进制第 j 位为1(0),我们只需知道 [0,i-1] 这个区间内的数二进制第 j 位为0(1)的个数x,这样s[i]的第 j 位的贡献值为x*2^j;

#include<iostream>
#include<vector>
#include<map>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N][30];
signed main(){
	int n;
	cin>>n;
	int x;
	for(int i=1;i<=n;i++){
		cin>>x;
		for(int j=0;j<=20;j++){
			a[i][j]=(x>>j)&1;
			a[i][j]^=a[i-1][j];
		}
	}
	int ans=0;
	for(int j=0;j<=20;j++){
		map<int,int> mp;
		mp[0]++;
		for(int i=1;i<=n;i++){
			int x=mp[a[i][j]^1];//与第i个数第j位不同的个数
			ans+=(1<<j)*x;
			mp[a[i][j]]++;
		}
	}
	cout<<ans<<endl;
	return 0;
}
#include<iostream>
#include<vector>
#include<map>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N];
int s[N];
int cnt[N][30];
signed main(){
	int n;
	cin>>n;
	int x;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		s[i]=s[i-1]^a[i];
	}
//求n+1个数第j位0和1的个数
	for(int j=0;j<=20;j++){
		for(int i=0;i<=n;i++){
			if(s[i]>>j&1) cnt[j][1]++;
			else cnt[j][0]++;
		}
	}
	int ans=0;
	for(int i=0;i<=20;i++){
//每个1都可以和每个0异或等于1,总数为cnt[i][0]*cnt[i][1],每个1的贡献值为2^i
		ans+=cnt[i][0]*cnt[i][1]*(1<<i);
	}
	cout<<ans<<endl;
	return 0;
}

像素放置(X)

翻转硬币(X)

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

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

相关文章

Vue3学习笔记+报错记录

文章目录 1.创建Vue3.0工程1.1使用vue-cli创建1.2 使用vite创建工程1.3.分析Vue3工程结构 2.常用Composition2.1 拉开序幕的setup2.2 ref函数_处理基本类型2.3 ref函数_处理对象类型2.4 ref函数使用总结 1.创建Vue3.0工程 1.1使用vue-cli创建 查看vue/cli版本&#xff0c;确保…

51之定时器与中断系统

目录 1.定时器与中断系统简介 1.1中断系统 1.2定时器 1.2.1定时器简介 1.2.2定时器大致原理及其配置 1.2.3定时器所需的所有配置总介 2.定时器0实现LED闪烁 3.使用软件生成定时器初始化程序 1.定时器与中断系统简介 1.1中断系统 首先&#xff0c;我们需要来了解一下什么…

选择企业邮箱,扬帆迈向商务新纪元!

企业邮箱和个人邮箱不同&#xff0c;它的邮箱后缀是企业自己的域名。企业邮箱供应商一般都提供手机app、桌面端、web浏览器访问等邮箱使用途径。那么什么是企业邮箱&#xff1f;如何选择合适的企业邮箱&#xff1f;好用的企业邮箱应具备无缝迁移、协作、多邮箱管理等功能。 企…

(一)小案例银行家应用程序-介绍

案例示例如下所示&#xff1a; 登录之后就会出现下面所示&#xff1a; 项目案例流程图如下 ● 首先我们建立四个账号对象&#xff0c;用于登录 const account1 {owner: ItShare,movements: [200, 450, -400, 3000, -650, -130, 70, 1300],interestRate: 1.2, // %pin: 11…

算法学习系列(四十七):IDA*

目录 引言一、概念二、例题1.排书2.回转游戏 引言 之前觉得这个IDA*算法、迭代加深算法很神秘&#xff0c;感觉很难&#xff0c;其实自己学下来感觉其实不难&#xff0c;相反思路非常的简单&#xff0c;清晰明了&#xff0c;我觉得难是因为我之前从来都不写暴力&#xff0c;就…

发布自己的github项目

git下载 git关网&#xff1a;https://git-scm.com/ 下载后是exe文件 git安装 除了选安装地址&#xff0c;其他都是下一步下一步傻瓜式安装 安装好之后随便一个地方右键多了两个东西 git gui here 和git bash here git测试配置及创建github项目 右键git bash here 测试…

C语言之指针的指向地址和指针的内容总结(八十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

全国加油站分布数据/停车场分布/公园分布/景区分布/保护区分布/poi感兴趣点

加油站是指为汽车和其它机动车辆服务的、零售汽油和机油的补充站&#xff0c;一般为添加燃料油、润滑油等。由于加油站所销售的石油商品具有易燃爆、易挥发、易渗漏、易集聚静电荷的特性&#xff0c;故加油站以“安全”为第一准则。在加油站内严禁烟火&#xff0c;严禁从事可能…

SpringMVC --- 老杜

1、什么是SpringMVC&#xff1f; SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的及部分&#xff0c;…

java中大型医院HIS系统源码 Angular+Nginx+SpringBoot云HIS运维平台源码

java中大型医院HIS系统源码 AngularNginxSpringBoot云HIS运维平台源码 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务&#xff0c;提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工…

Gson的用法

1. 导入依赖 <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version> </dependency> 2. 使用Gson进行解析 2.1 Gson解析普通对象 package com.jiang.partnetbackend.…

Studio One 6注册机下载安装激活教程

一、Studio One 6安装 StudioOne6 下载&#xff1a;https://souurl.cn/Y6ZWCY StudioOne6 Win/Mac版注册机下载&#xff1a; rack百度网盘&#xff1a;https://pan.baidu.com/s/1zX3DqXt-wsy510L1lDI7Xg 提取码&#xff1a;3phh 1.双击Studio One6安装包&#xff0c;如下图&…

Qt中的事件学习笔记

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs/?spm_id_from333.999.0.0&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41b事件 Qt主要用来开发带窗口的应用程序&#xff0c;我们使用的窗口的应用程序都是基于时间&#xff08;比如安卓中的点击事件&#xff09;&…

【机器学习】机器学习创建算法第4篇:K-近邻算法,学习目标【附代码文档】

机器学习&#xff08;算法篇&#xff09;完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;机器学习算法课程定位、目标&#xff0c;K-近邻算法定位,目标,学习目标,1 什么是K-近邻算法,1 Scikit-learn工具介绍,2 K-近邻算法API。K-近邻算法&#xff0c;1.4 …

手术麻醉系统源码 医疗信息管理系统源码C#.net6.0+ vs2022,vscode+BS网页版 手麻系统源码

手术麻醉系统源码 医疗信息管理系统源码C#.net6.0 vs2022,vscodeB/S网页版 手麻系统源码 手术麻醉管理系统是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人进行全程跟踪与信息管理&#xff0c;自动集成病人HIS、LIS、RIS、PACS信息&…

第四百四十三回

文章目录 1. 概念介绍2. 思路与方法2.1 整体思路2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义Action菜单"相关的内容&#xff0c;本章回中将介绍如何获取屏幕相关参数.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

【面试八股总结】进程(一)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、什么是进程&#xff1f; 1. 基本概念 进程是具有独立功能的程序在一个数据集合上运行的过程&#xff0c;是系统进行资源分配和调度的一个独立单位。 2. 进程控制块 系统通过进程控制块PCB描述进程的进本情况…

[Spring Cloud] gateway全局异常捕捉统一返回值

文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…

vue3中实现文本显示省略号和tooltips提示框

前言 在 B 端业务中&#xff0c;我们经常会遇到文本内容超出容器区域需显示省略号的需求。当鼠标移入文本时&#xff0c;会出现 Tooltip 显示完整内容。最近&#xff0c;我也遇到了这样的场景。为了提高业务通用性&#xff0c;我已将其封装为组件、Hook 和指令等形式供使用。 …

从0到1实现RPC | 04 负载均衡和静态注册中心

一、Router的定义 Router路由用于预筛选&#xff0c;Dubbo有这样的设计&#xff0c;SpringCloud没有。 二、LoadBanlancer定义 负载均衡器&#xff1a;默认取第一个 当前支持随机和轮询两种负载均衡器。 随机&#xff1a;从所有provider中随机选择一个。 轮询&#xff1a;每…