IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 《2019年蓝桥杯C++b组》 -> 正文阅读

[数据结构与算法]《2019年蓝桥杯C++b组》

A-组队

作为篮球队教练,你需要从以下名单中选出1 号位至5 号位各一名球员,组成球队的首发阵容。
每位球员担任1号位至5号位时的评分如下表所示。请你计算首发阵容1号位至5号位的评分之和最大可能是多少?
//手算 答案490

B-年号字符

题目描述
小明用字母A 对应数字1,B 对应2,以此类推,用Z 对应26。对于27以上的数字
小明用两位或更长位的字符串来对应,例如AA 对应27,AB 对应28,AZ 对应52,LQ 对应329。
请问2019 对应的字符串是什么?
//答案BYQ 这个题我还是手算的。太菜了不会写代码

C-数列求值

题目描述
给定数列1, 1, 1, 3, 5, 9, 17, …,从第4 项开始,每项都是前3 项的和。求
第20190324 项的最后4 位数字。
//这个题目也是非常简单的。需要注意的是每求和一次对10000求余

#include<iostream>
#include<algorithm>
using namespace std;
int a[20190324];
int main() {
    a[0]=1;
    a[1]=1;
    a[2]=1;
    for(int i=3; i<20190324; i++) {
        a[i]=(a[i-1]+a[i-2]+a[i-3])%10000;
    }
    cout<<a[20190323]%10000<<endl;
    return 0;
}

D-数的分解

题目描述
把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?
注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和1001+1000+18 被视为同一种。

//暴力,注意是3个不相同的正整数,防止重复,i<j<k

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
 int a,b,c,sum;
 bool tian(int x){
 	while(x){
 		if(x%10==4||x%10==2)
 		return false;
 		x=x/10;
	 }
	 return true;
 }
int main()
{ 
sum=0;
 for( a=1;a<2019;a++){
 	for( b=a+1;b<2019;b++){
 		for(c=b+1;c<2019;c++){
 			if(a+b+c==2019){
 				if(tian(a)&&tian(b)&&tian(c))
 				sum++;
			 }
		 }
	 }
 }
 cout<<sum<<endl;
    return 0;
}

E-特别数的和

题目描述
小明对数位中含有2、0、1、9 的数字很感兴趣(不包括前导0)
在1到40中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574。
请问,在1到n 中,所有这样的数的和是多少?
输入格式
输入一个正整数n(1<=n<=10000)
输出格式
输出一行,包含一个整数,表示满足条件的数的和。
输入样例 复制
40
输出样例 复制
574

//个人觉得,这个题跟D题没有很大区别。

#include <iostream>
#include <algorithm> 
using namespace std;
bool tian(int x)
{
	while(x)
	{
		int t = x % 10;
		if(t == 0 || t == 1 || t == 2 || t == 9) return true;
		x /= 10; 
	} 
	return false;
}
int main()
{
	int n;
	cin >> n;
	long long sum = 0;
	for(int i = 1; i <= n; i ++ )
	{
		if(tian(i)) 
		sum += i;
	}
	cout << sum << endl;
	return 0;
}


F-完全二叉树的权值

题目描述
给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从
上到下、从左到右的顺序依次是A1, A2, AN,如下图所示:
在这里插入图片描述

现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点
权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是1。
输入格式
第一行包含一个整数N。
第二行包含N 个整数A1, A2, AN
对于所有评测用例,1<=N<=100000, -100000<=Ai<=100000。
输出格式
输出一个整数代表答案。
输入样例 复制
7
1 6 5 4 3 2 1
输出样例 复制
2

//这个自己的代码只过了80%的数据,但是我已经很开心了
正确的题解请去看其他博主的博客

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
const int Max_=1e5+5;
long long a[Max_];
long long b[Max_];
int main()
{
long long n;
cin>>n;
long long t=1,x=1,k=1;
for(long long i=0;i<n;i++){
	cin>>a[i];
	b[k]+=a[i];
	x--;
	if(x==0){
		k++;
		t=t*2;
		x=t;
	}
}
long long max=-999999,y;
for(long long i=0;i<k;i++){
	if(b[i]>max){
		max=b[i];
		y=i;
	}
}
cout<<y<<endl;
    return 0;
}

G-等差数列

题目描述
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N 个整数。
现在给出这N 个整数,小明想知道包含这N 个整数的最短的等差数列有几项?
输入格式
输入的第一行包含一个整数N。
第二行包含N 个整数A1.A2,…, AN。(注意A1<=AN 并不一定是按等差数列中的顺序给出)
2<=N<=100000,0<=Ai<=10^9
输出格式
输出一个整数表示答案。
输入样例 复制
5
2 6 4 10 20
输出样例 复制
10
数据范围与提示
包含2、6、4、10、20 的最短的等差数列是2、4、6、8、10、12、14、16、18、20。

//根据等差数列公式an=a1+(n-1)×d,注意公差为0,输出n

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
const int Max_=1e6+5;
long long a[Max_];
int main() {
    int n;
    cin>>n;
    long long min=inf,max=0;
    for(long long i=0; i<n; i++) {
        cin>>a[i];
        if(a[i]<min)
            min=a[i];
        if(a[i]>max)
            max=a[i];
    }
    sort(a,a+n);
    long long d=inf;
    for(int i=1; i<n; i++) {
        if(a[i]-a[i-1]<d)
            d=a[i]-a[i-1];
    }
    if(d==0)
    cout<<n<<endl;
    else
    cout<<(max-min)/d+1<<endl;
    return 0;
}

H-后缀表达式

题目描述
给定N 个加号、M 个减号以及N + M + 1 个整数A1,A2,…,AN+M+1
小明想知道在所有由这N 个加号、M 个减号以及N + M +1 个整数凑出的合法的后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。
例如使用1 2 3 + -,则“2 3 + 1 -” 这个后缀表达式结果是4,是最大的。
输入格式
第一行包含两个整数N 和M。
第二行包含N + M + 1 个整数A1,A2,…,AN+M+1
0<=N,M<=100000,-109<=Ai<=109
输出格式
输出一个整数,代表答案。
输入样例 复制
1 1
1 2 3
输出样例 复制
4
//自己的代码过了30%,忽略了可以加括号的问题
//下面是某大佬的代码即解题思路
//给题意翻译翻译,其实就是有n个加号,m个减号,n+m+1个数,可以加括号,问组成表达式的最大值。
特殊情况:m=0,直接输出和
一般情况:把所有数排个序,最大的拿出来,放首项,把最小的数拿出来,给他一个减号,再套一个括号,那么现在还未完成的表达式长这样:
可以发现,现在如果我想加一个数的话,给它一个加号,放在括号外面,也可以给它一个减号,放在括号里面;减一个数同理。换句话说,只要用一个减号,一个最大值,一个最小值,其他数我想加就加,想减就减。那么为了使结果最大,我加上正数,减去负数,就是直接加上所有剩下数的绝对值,那么就解决了。

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

using namespace std;
const int N = 200010;
typedef long long LL;

int n, m;
int a[N];

int main()
{
    scanf("%d%d", &n, &m);
    int k = n + m + 1; 
    for(int i = 0; i < k; i ++ ) scanf("%d", &a[i]);
    
    sort(a, a + k);
    
    LL res = 0;
    if(m <= 0) 
        for(int i = 0; i < k; i ++ ) res += a[i];
    else
    {
        res = a[k - 1] - a[0];
        for(int i = 1; i < k - 1; i ++ ) res += abs(a[i]);
    }
    
    
    cout << res << endl;
    return 0;
}

总结

2022年3月12号,2019年的蓝桥杯是我这几天写出来最多的一个。本来下午看完网站程序设计就挺迷茫的,感觉几个小时过去了,没有一点点的收获。然后这个2019年的蓝桥杯哈哈哈哈哈,突然让我自信起来了。完全二叉树那个题目自己都没有想到可以过了那么多的数据。也让我想起来老师说的一句话:要相信自己是最棒的。最最最重要的还是,我好想好想参加国赛。
今天下雨了!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 22:03:13  更:2022-03-13 22:06:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:57:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码