第十四届蓝桥杯大赛软件赛省赛

第十四届蓝桥杯大赛软件赛省赛

2.日期统计

小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。
数组中的元素从左至右如下所示:

5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3

现在他想要从这个数组中寻找一些满足以下条件的子序列:

  1. 子序列的长度为 8;
  2. 这个子序列可以按照下标顺序组成一个 yyyymmdd 格式的日期,并且

要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。
yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
请你帮小蓝计算下按上述条件一共能找到多少个不同的 2023 年的日期。
对于相同的日期你只需要统计一次即可。
本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。


枚举2023年的每一个日期,去字符串中判断是否合法

#include <bits/stdc++.h>
using namespace std;
int months[] = 
{0,31,28,31,30,31,30,31,31,30,31,30,31
};
int cnt;string s = "5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3";bool check_date(string date)
{int idx = 0;for(int i = 0; i < s.size(); i ++){if(s[i] == date[idx]){idx ++;if(idx >= 8)return true;}}return false;
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);for(int month = 1; month <= 12; month ++){for(int day = 1; day <= months[month]; day ++){string date = to_string(20230000 + month * 100 + day);
//            cout << date << endl;if(check_date(date))cnt ++;}}cout << cnt << endl;return 0;
}

答案:235


2.01串的熵

对于一个长度为 n 的 01 串 S = x1x2x3…xn.
香农信息熵的定义为:
img
其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。
比如,对于S = 100 来说,信息熵 H(S ) = - 1/3 log2(1/3) - 2/3 log2(2/3) - 2/3 log2(2/3) = 1.3083。
对于一个长度为23333333 的 01 串,如果其信息熵为 11625907.5798,且 0 出现次数比 1 少,那么这个01 串中 0 出现了多少次?
本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。

be6c0a00b26170b53d69a0880c4d298

#include <bits/stdc++.h>
using namespace std;
const int m = 23333333;
double p0, p1;
double hs = 11625907.5798;int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);double hs_cal = 0;//存储计算出来的串熵for(int i = 0; i < m / 2; i ++)//0出现次数比1少只要枚举一半{p0 = i * 1.0 / m;p1 = (m - i) * 1.0 / m;
//        cout << p0 << " " << p1 << endl;hs_cal = i * 1.0 * p0 * (log(p0)/log(2)) + (m - i) * 1.0 * p1 * (log(p1)/log(2));if(fabs(hs_cal + hs) < 1e-4){cout << i << endl;return 0;}}
}

答案:11027421


1.冶炼金属

题目描述

小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。
这个炉子有一个称作转换率的属性 V,V 是一个正整数,
这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X。
当普通金属 O 的数目不足 V 时,无法继续冶炼。
现在给出了 N 条冶炼记录,每条记录中包含两个整数 A 和 B,
这表示本次投入了 A 个普通金属O,最终冶炼出了 B 个特殊金属X。
每条记录都是独立的,这意味着上一次没消耗完的普通金属 O 不会累加到下一次的冶炼当中。
根据这 N 条冶炼记录,请你推测出转换率 V 的最小值和最大值分别可能是多少。
题目保证评测数据不存在无解的情况。

输入格式

第一行一个整数 N,表示冶炼记录的数目。
接下来输入 N 行,每行两个整数 A、B,含义如题目所述。
对于 30% 的评测用例,1 ≤ N ≤ 100。
对于 60% 的评测用例,1 ≤ N ≤ 1000。
对于 100% 的评测用例,1 ≤ N ≤ 10000,1 ≤ B ≤ A ≤ 1,000,000,000。

输出格式

输出两个整数,分别表示 V 可能的最小值和最大值,中间用空格分开。

输入样例 复制
3
75 3
53 2
59 2
输出样例 复制
20 25
数据范围与提示

当 V = 20 时,有:⌊75 / 20⌋ = 3,⌊53 / 20⌋ = 2,⌊59 / 20⌋ = 2,可以看到符合所有冶炼记录。
当 V = 25 时,有:⌊75 / 25⌋ = 3,⌊53 / 25⌋ = 2,⌊59 / 25⌋ = 2,可以看到符合所有冶炼记录。
且再也找不到比 20 更小或者比 25 更大的符合条件的 V 值了。

image-20240406215021842

#include <bits/stdc++.h>
using namespace std;
int Vmax = 0x3f3f3f3f, Vmin = 0;
int n;
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;while(n --){int a, b;cin >> a >> b;Vmax = min(Vmax, a / b);Vmin = max(Vmin, (a / (b + 1) + 1));}cout << Vmin << " " << Vmax << endl;return 0;
}

1.整数删除

题目描述

给定一个长度为 N 的整数数列:A1, A2, … , AN。你要重复以下操作 K 次:
每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除。
并把与它相邻的整数加上被删除的数值。
输出 K 次操作后的序列。

输入格式

第一行包含两个整数 N 和 K。
第二行包含 N 个整数,A1, A2, … , AN。
对于 20% 的数据,1 ≤ K < N ≤ 10000。
对于 100% 的数据,1 ≤ K < N ≤ 5 × 105,0 ≤ Ai ≤ 108。

输出格式

输出 N − K 个整数,中间用一个空格隔开,代表 K 次操作后的序列。

输入样例 复制
5 3
1 4 2 8 7
输出样例 复制
17 7
数据范围与提示

数列变化如下,中括号里的数是当次操作中被选择的数:
[1] 4 2 8 7
5 [2] 8 7
[7] 10 7
17 7


纯模拟可过30%

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, k;int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> k;vector<int> a;for(int i = 1; i <= n; i ++){int x;cin >> x;a.push_back(x);}while(k --){//寻找最小值int x = *min_element(a.begin(), a.end());for(int i = 0; i <= (int)a.size() - 1; i ++){if(a[i] == x){if(i - 1 >= 0) a[i - 1] += x;if(i + 1 <= (int)a.size() - 1) a[i + 1] += x;a.erase(a.begin() + i, a.begin() + i + 1);break;}}}for(int i = 0; i < (int)a.size(); i ++)cout << a[i] << " \n"[i == a.size() - 1];return 0;
}

正解:优先队列+双链表

image-20240406210221210

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
typedef long long LL;
typedef pair<LL, LL> PLL;
priority_queue<PLL, vector<PLL>,greater<PLL>> q;
LL a[N], l[N], r[N];
int n, k;int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> k;for(int i = 1; i <= n; i ++){cin >> a[i];l[i] = i - 1, r[i] = i + 1;q.push({a[i], i});}while(k && !q.empty()){auto t = q.top();q.pop();LL val = t.first, id = t.second;if(a[id] == val){//可以删除a[l[id]] += a[id], a[r[id]] += a[id], k --;l[r[id]] = l[id], r[l[id]] = r[id], a[id] = 0;}else{q.push({a[id], id});}}for(int i = 1; i <= n; i ++)if(a[i])cout << a[i] << " ";return 0;
}

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

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

相关文章

【Linux】Linux C 编程

在 Windows 下编程首先就是安装对应的 IDE &#xff0c;然后在 IDE 里面进行代码编写和编译&#xff0c;但是在 Linux 下&#xff0c;这两个部分是分开的&#xff0c;比如我们可以使用 vim 编辑器编写代码&#xff0c;然后用 gcc 编译器编译代码。Ubuntu 下有一些可以进行编程的…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的机制&#xff0c;将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中&#xff0c;工厂设计模式主要有三种形式&#xff1a;简单工厂…

前端学习<二>CSS基础——16-浏览器的兼容性问题

我们在div里放一个img&#xff0c;发现&#xff1a; 在html和html5中&#xff0c;div的长宽是不同的&#xff0c;后者的高度要超过几个像素。 比如说&#xff0c;下面这个是html的。 <!DOCTYPE html><html lang"en"><head><meta charset"…

2023-01-05(星期四)-恶意垃圾邮件导致agenttesla变体感染,可能是originlogger

前言 参考1 参考2 OriginLogger是一个开源的日志记录器&#xff0c;用于在应用程序中记录和管理日志信息。它提供了一种简单而灵活的方式来记录各种级别的日志&#xff0c;包括调试信息、警告和错误消息等。 AgentTesla病毒主要通过钓鱼邮件进行传播&#xff0c;钓鱼邮件内容多…

OJ题目分享

【问题3】 本问题中&#xff0c;我们用以下的编码表示一定范围内的整数&#xff1a; 10〜35:以大写英文字母A至Z表示&#xff1b;0〜9:以字符’0’至’9’表示&#xff1b;-1〜-10:分别以!#$%?&*()表示&#xff1b;-11〜-36:以小写英文字母a至z表示&#xff1b; 这样一…

C语言解决汉诺塔问题

背景 首先带大家了解一下汉诺塔问题 汉诺塔是一个典型的函数递归问题&#xff0c;汉诺塔描述了这样的场景&#xff0c;有三个柱子&#xff0c;A,B,C&#xff0c;A柱为起始柱&#xff0c;在A柱上面有若干大小不同的盘子&#xff0c;最下面的最大&#xff0c;最上面的最小&#x…

Spring Cloud介绍

一、SpringCloud总体概述 Cloud Foundry Service Broker&#xff1a;通用service集成进入Cloud Foundry Cluster&#xff1a;服务集群 Consul&#xff1a;注册中心 Security&#xff1a;安全认证 Stream&#xff1a;消息队列 Stream App Starters&#xff1a;Spring Cloud Stre…

蓝桥杯算法基础(38)c++ STL

哈希表的常用函数 #include<iostream> #include<unordered_map> #include<string> int main(){ //创建一个unordered_map实例 std::unordered_map<std::string,int>hash_table; //插入数据 hash_table["one"]1; …

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据&#xff08;重点&#xff01;&#xff09;4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…

socket套接字函数

Socket套接字函数是用于网络编程的一组API&#xff0c;用于在网络上进行通信。这些函数提供了一种通用的接口&#xff0c;使得程序能够通过网络连接进行数据的发送和接收。下面是对常见的几个Socket函数及其参数的解释&#xff1a; socket()函数&#xff1a; 作用&#xff1a;创…

开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测

参考文献&#xff1a; [1]Tian Z, Gai M. Football team training algorithm: A novel sport-inspired meta-heuristic optimization algorithm for global optimization[J]. Expert Systems with Applications, 2024, 245: 123088. 1.算法基本原理 足球队训练算法&#xff0…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法&#xff1f; 缓存穿透和缓存击穿的区别&#xff1f; 缓存雪崩 雪崩解决办法&#xff1f; 如何确保缓存和数据库数据的一致性&#xff1f; 常见的缓存更新策略&#xff1f; 缓存穿透 定义&#xff1a;缓存穿透说…

算法| ss 二叉树

二叉树的层序遍历 102. 二叉树的层序遍历 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : righ…

【科普】卫星如何定位汽车

卫星定位汽车的方法&#xff0c;主要依赖于全球定位系统&#xff08;GPS&#xff09;&#xff0c;它是一种结合卫星及通讯发展的技术&#xff0c;利用导航卫星进行测时和测距。用户接收机通过接收这些卫星播发的信号&#xff0c;可以测定其到卫星的距离并确定自身位置。下面&am…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

授人以渔 选购篇二:冰箱选购要点

文章目录 系列文章容量&#xff1a;每人约需70-80升空间门体类型与尺寸制冷方式&#xff1a;风冷变频能效等级&#xff1a;一级能效品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&#xff1a;冰箱选购要点 授人以渔 选购篇三&#xff1a;…

阿里巴巴蔡崇信:中国AI追赶神速,制造业霸主地位无可撼动!

快科技4月5日讯&#xff0c;阿里巴巴集团创始人兼董事长蔡崇信近日就AI技术领域及全球制造业形势发表看法。他认为&#xff0c;尽管中国在AI技术方面与美国有一定差距&#xff0c;但中国的追赶速度非常快。 AI-321 | 专注于AI工具分享的网站 AI工具集 | 人工智能工具箱 | 全球…

金三银四面试题(十五):Java基础问题(6)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 HashMap与ConcurrentHashMap 都是key-value 形式的存储数据&#xff1b; HashMap 是线程不安全的&#xff0c;ConcurrentHashMap 是JUC 下的线程安全的&#xff1b; HashMap 底层…

NumPy 数组对象

NumPy 数组对象 1. Example 12. Example 2References NumPy 数组一般是同质的 (但有一种特殊的数组类型例外&#xff0c;它是异质的)&#xff0c;即数组中的所有元素类型必须是一致的。这样有一个好处&#xff1a;如果我们知道数组中的元素均为同一类型&#xff0c;该数组所需的…

2024.4.6学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p315-p328 动态绑定机制 当调用方法对象的时候&#xff0c;该方法会和该对象的内存地址/运行类型绑定 当调用对象属性时&#xff0c;没有动态绑定机制&#xff0c;哪里声明&#xff0c;哪里使用 …