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

【规律题】平方差

题目描述

给定 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^ians+=cnt[i][0]*cnt[i][1]*(1<<i);}cout<<ans<<endl;return 0;
}

像素放置(X)

翻转硬币(X)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tidb和MySQL性能简单测试对比

一、单SQL性能对比 由于TiDB的并发能力优秀&#xff0c;但是单个SQL执行延迟较差&#xff0c;为了客观对比&#xff0c;所以只用1个线程来压测tidb和mysql&#xff0c;以观察延迟情况 二、并发SQL性能对比 TiDB:v6.5.2 MySQL:8.0.26 &#xff08;单机&#xff09; 三、结论 …

c/c++ | socket tcp client server

突然想着&#xff0c;花一个socket tcp 客户-服务通信 这应该是很经典的流程了吧 感觉还是要训练这种随手画图的能力&#xff0c;毕竟文字的描述还是不及图片强烈 参考01

策略模式图

策略模式 小小的图解 主要的三个角色 Strategy—抽象策略角色ConcreateStrategy—具体策略角色Context—上下文角色 封装了对具体策略的调用可以使用set的依赖注入也可以使用构造方法 核心是上下文角色 只要调用上下文角色就行&#xff0c;实现解耦 策略 工厂 将上下文角…

基于SpringBoot和Vue的金融融资管理系统的设计和实现【附源码】

1、系统演示视频&#xff08;演示视频&#xff09; 2、需要交流和学习请联系

深入了解 Python 中标准排序算法 Timsort

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Timsort&#xff1a;一个非常快速的、时间复杂度为 O ( n l o g n ) O (n \ log\ n) O(n log n)、稳健&#xff08;即不改变等值元素间的相对顺序&#xff09;的排序算法&#xff0c;在处理真实世界数…

拥塞控制算法系列之:Swift-谷歌2020年SIGCOM-包级别端到端TIMELY拥塞控制算法

核心要点&#xff1a; 谷歌 2020 SIGCOM基于delay的AIMD拥塞拆分EC和FC&#xff0c;时延敏感场景优势分别计算EC和FC的wnd&#xff08;最核心&#xff09;保障吞吐和低延迟。Swift 因利用延迟的简单性和有效性而闻名包级别的论文&#xff1a;https://dl.acm.org/doi/pdf/10.11…

【C++】二叉搜索数

目录 一、二叉搜索树的概念 二、二叉搜索树的模拟实现 1、定义节点 2、构造二叉树 3、析构二叉树 ​4、拷贝二叉树 5、二叉树赋值 6、插入节点 &#x1f31f;【非递归方式】 &#x1f31f;【递归方式】 7、打印节点 8、搜索节点 &#x1f31f;【非递归方式】 &…

DDR3接口

mig IP核的配置 首先添加mig IP核   然后确认以下工程信息&#xff0c;主要是芯片型号以及编译环境&#xff0c;没什么问题后点击next.   如下图所示&#xff0c;这一页选择"Create Design"&#xff0c;在"Component Name"一栏设置该IP元件的名称&…

Prometheus+grafana环境搭建Nginx(docker+二进制两种方式安装)(六)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前五篇链接如下 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环…

第十届蓝桥杯大赛个人赛省赛(软件类) CC++ 研究生组2.0

A立方和 #include<iostream> #include<cmath> using namespace std; int main(){int n, t, flag, x;long long ans 0;for(int i 1; i < 2019; i){t i;flag 0;while(t && !flag){x t % 10;if(x 2 || x 0 || x 1 || x 9) flag 1;t / 10;}if(fl…

prompt 工程案例

目录 prompt 工程是什么&#xff1f; 案例 vllm 推理加速框架 prompt 工程是什么&#xff1f; prompt&#xff1a;提示词&#xff0c;也就是我们使用网页版输入给大模型的内容就叫 prompt&#xff0c;那什么是 prompt 工程呢&#xff1f; 简单理解其实就是利用编写的 prom…

3个 JavaScript 字符串截取方法

在 JavaScript 中&#xff0c;可以使用 substr()、slice() 和 substring() 方法截取字符串. substring() substring() 方法返回一个字符串在开始索引到结束索引之间的一个子集&#xff0c;或从开始索引直到字符串的末尾的一个子集。语法如下&#xff1a; str.substring(inde…

cmake中报错undefined reference to `pthread_create‘的解决方法

出现报错&#xff1a; 解决方法 一般网上会建议在终端指令g/gcc后面增加参数-pthread,但是我们没有用到g/gcc指令. cmake的解决方法是在CMakeLists.txt文件里面增加一行. add_executable(server2 main.cpp) target_link_libraries(server2 pthread)问题就解决了

uniapp切换中英文

一、安装 npm install uni-i18n --save 二、创建中英文切换的文件 1.英文en.js文件 2.中文zh_CN.js文件 三、 main.js中引用 // Vue i18n 国际化 import VueI18n from /common/vue-i18n.min.js; Vue.use(VueI18n);// i18n 部分的配置&#xff0c;引入语言包&#xff0c;注意路…

c# wpf template itemtemplate+ListBox

1.概要 2.代码 <Window x:Class"WpfApp2.Window7"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/…

SCP 从Linux快速下载文件到Windows本地

需求&#xff1a;通过mobaxterm将大文件拖动到windows本地速度太慢。 环境&#xff1a;本地是Windows&#xff0c;安装了Git。 操作&#xff1a;进入文件夹内&#xff0c;鼠标右键&#xff0c;点击Git Bash here&#xff0c;然后输入命令即可。这样的话&#xff0c;其实自己本…

基于SpringBoot+微信小程序的农产品销售平台

一、项目背景介绍&#xff1a; 随着人们收入的不断增加、生活水平的普遍提高,对生活质量的要求也日益凸显。而作为关乎每个人的生命、健康安全的食品卫生、质量无疑更被人们所重视。所以,… 2. 其他国家的绿色有机食品所占其国家食品市场比重比较大,如德国在99年便已达到40%,美…

基于51单片机和MAX1898的智能手机充电器设计

**单片机设计介绍&#xff0c;基于51单片机和MAX1898的智能手机充电器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机和MAX1898的智能手机充电器设计概要 一、引言 随着智能手机的普及&#xff0c;其电池续航…

AcWing1402.星空之夜

【题目链接】1402. 星空之夜 - AcWing题库 夜空深处&#xff0c;闪亮的星星以星群的形式出现在人们眼中&#xff0c;形态万千。 一个星群是指一组非空的在水平&#xff0c;垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如…

在深度学习模型中引入先验

当面对复杂问题的时候&#xff0c;在深度学习模型提取特征的过程中完全抛弃知识是非常不明智的策略。虽然有很多研究者在深度网络处理数据之前&#xff0c;利用具有某种知识的模型驱动方法对数据进行预处理&#xff0c;但是这种方法没有进行实质性地改造深度网络&#xff0c;且…