第十四届蓝桥杯大赛软件赛国赛C/C++研究生组

news2025/7/8 20:56:26

研究生C++国赛软件大赛

    • 题一:混乘数字
    • 题二:钉板上的正方形
    • 题三:整数变换
    • 题四:躲炮弹
    • 题五:最大区间

题一:混乘数字

在这里插入图片描述

有一点像哈希表:
首先定义两个数组,拆分ab和n
然后令n = a*b 查看两个表对应的十进制位数和个数是否相同
还需要定义一个set,用于验证当前的n是否已经被计算过了
是因为2 * 8== 4 * 4 == 16

#include<bits/stdc++.h>
using namespace std;
set<int> s;//
int StoredAB[10],StoredN[10];//0-9一共10个珠子
int ans;
//验证
bool test(int n,int a,int b){
  //初始化两个数组
  memset(StoredAB,0,sizeof(StoredAB));
  memset(StoredN,0,sizeof(StoredN));
  while(n){
    StoredN[n%10]++;
    n/=10;
  }
  while(a) StoredAB[a%10]++,a/=10;
  while(b) StoredAB[b%10]++,b/=10;
  for(int i=0;i<=9;i++){
    if(StoredAB[i]!=StoredN[i]) return false;
  }
  return true;
}
int main()
{
  for(int a=1;a<1000000;a++){
    for(int b = 1;b<1000000;b++){
      int n = a*b;
      if(n>1000000) break;
      if(test(n,a,b)){
        if(s.find(n)==s.end()){ //没有set集合当中的话
          ans++;
          s.insert(n);
        }
      }
    }
  }
  cout<<ans<<endl;
  return 0;
}

题二:钉板上的正方形

在这里插入图片描述
在这里插入图片描述

下面给出的代码在表示其他正方形定点时用到了三角形的旋转
在这里插入图片描述
下面给出代码:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int a[10][10] = 
{
        {1,1,0,1,0,1,1,1,1,1},
        {1,1,1,0,0,1,1,1,1,0},
        {1,1,0,0,1,0,1,1,1,1},
        {1,0,1,1,0,1,1,1,1,0},
        {1,0,1,0,1,1,1,1,0,0},
        {1,0,0,1,0,1,0,1,0,1},
        {1,1,1,1,1,1,1,1,1,0},
        {0,1,1,1,1,1,1,1,1,0},
        {0,1,1,0,1,0,1,1,1,1},
        {1,0,1,0,0,1,0,1,0,0}
};

struct edge {
    int x, y;
    bool operator <(const edge &e) const {
        return x * x + y * y < e.x * e.x + e.y * e.y;
    }
};

int main() {
    set<edge> st;
    auto test = [&](int i, int j) {
        if(i < 0 || i >= 10 || j < 0 || j >= 10) return false;
        return a[i][j] == 1;
    };
    for(int i = 0;i < 10;i++) {
        for(int j = 0;j < 10;j++) {
            if(a[i][j] != 1) continue;

            for(int x = i;x < 10;x++) {
                for(int y = j;y < 10;y++) {
                    if(x == i && y == j) continue;
                    if(a[x][y] != 1) continue;

                    int dx = x - i, dy = y - j;
                    if(test(i + dy, j - dx) && test(i + dx + dy, j + dy - dx)) {
                        st.insert(edge{dx, dy});
                    }
                }
            }
        }
    }
    cout << st.size() << endl;
}

题三:整数变换

在这里插入图片描述

这道题比较简单 直接给代码嗷:

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n;
  cin>>n;
  int mintues = 0;
  while(n>0){
    int temp = n;
    int sum=0;
    while(temp>0){
      sum+=temp%10;
      temp/=10;
    }
    n-=sum;
    mintues++;
  }
  cout<<mintues;
  return 0;
}

题四:躲炮弹

在这里插入图片描述

本题有一个点就是他给的距离n是基于数轴上的原点的距离,题意没有说的很清楚
其他的就是需要向左向右寻找能够躲避炮弹的点

#include <iostream>
#include <algorithm>
using namespace std;

// 判断m是否安全:不被任何x∈[L, R]整除
bool is_safe(int m, int L, int R) {
    if (m < L) return true;           // m小于L时安全
    if (L <= m && m <= R) return false; // m在区间内则不安全

    for (int d = 1; d * d <= m; ++d) {
        if (m % d != 0) continue;
        int a = d;
        int b = m / d;
        // 检查因数对是否在区间内,因数都在区间内,则一定不安全
        if ((a >= L && a <= R) || (b >= L && b <= R)) {
            return false;
        }
    }
    return true;
}

int main() {
    int n, L, R;
    cin >> n >> L >> R;

    // 检查原始位置是否安全
    bool original_safe = true;
    if (L <= n && n <= R) { // 在区间内,一定不安全
        original_safe = false;
    } else {  // 在区间外,通过遍历因数是否在区间内判断原始位置是否安全
        original_safe = true;
        for (int d = 1; d * d <= n; ++d) {
            if (n % d == 0) {
                int a = d, b = n / d;
                if ((a >= L && a <= R) || (b >= L && b <= R)) {
                    original_safe = false;
                    break;
                }
            }
        }
    }
    if (original_safe) {
        cout << 0 << endl;
        return 0;
    }

    // 候选解A:向左移动到最近的安全位置
    int candidateA = -1;
    for (int m = n - 1; m >= 0; --m) {
        if (is_safe(m, L, R)) {
            candidateA = n - m;
            break;
        }
    }

    // 候选解B:向右移动到最近的安全位置
    int candidateB = -1;
    for (int m = n + 1; ; ++m) {
        if (is_safe(m, L, R)) {
            candidateB = m - n;
            break;
        }
    }

    // 如果候选解A不存在,则只考虑候选解B
    if (candidateA == -1) {
        cout << candidateB << endl;
    } else if (candidateB == -1) {
        cout << candidateA << endl;
    } else {
        cout << min(candidateA, candidateB) << endl;
    }

    return 0;
}

题五:最大区间

在这里插入图片描述

/*
使用单调栈求解左右边界
1.列表项找到左边界:找到第一个比当前元素小的位置left[i],则Ai能够作为最小值扩展到left[i]+1位置
2.列表找到右边界:找出第一个比当前元素小的位置right[i],则Ai能够作为最小值扩展到right[i]-1位置
这样Ai作为最小值的最大子数组长度为right[i]-left[i]-1;
*/
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
long long n,a[N],minn;
stack <long long>st;//栈

int main( )
{
    //根据题面得(R-L+1)*a[i]要尽可能大,所以我们可以从l[i]和r[i]下手
    //我们要求都要比他的区间要r[i]-l[i]-1+1
    //即可以完成第31行的代码
    scanf("%lld",&n);
    vector <int> l(n,-1);//答案数组1
    for(int i=0;i<n;i++)scanf("%lld",&a[i]);
    for(int i=0;i<n;i++)
    {
        while(!st.empty() && a[st.top()]>=a[i])st.pop( );
        if(!st.empty())l[i]=st.top( );
        st.push(i);
    }//找左边第一个比他小的元素的下标(注意是下标)
    while(!st.empty())st.pop( ); //清空栈,避免干扰。
    vector <int> r(n,n);//答案数组2
    for(int i=n-1;i>=0;i--)
    {
        while(!st.empty() && a[st.top()]>=a[i])st.pop( );
        if(!st.empty())r[i]=st.top( );
        st.push(i);
    }//找右边第一个比他小的元素的下标(注意是下标)
    for(int i=0;i<n;i++)
    {
        minn=max(minn,(r[i]-l[i]-1)*a[i]);
    }
    printf("%lld",minn);
}

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

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

相关文章

多模态大语言模型arxiv论文略读(四)

A Survey on Multimodal Large Language Models ➡️ 论文标题&#xff1a;A Survey on Multimodal Large Language Models ➡️ 论文作者&#xff1a;Shukang Yin, Chaoyou Fu, Sirui Zhao, Ke Li, Xing Sun, Tong Xu, Enhong Chen ➡️ 研究机构: 中国科学技术大学、腾讯优图…

python三大库之---pandas(二)

python三大库之—pandas&#xff08;二&#xff09; 文章目录 python三大库之---pandas&#xff08;二&#xff09;六&#xff0c;函数6.1、常用的统计学函数6.2重置索引6.3 遍历6.3.1DataFrame 遍历6.3.2 itertuples()6.3.3 使用属性遍历 6.4 排序6.4.1 sort_index6.4.2 sort_…

php7.4.3连接MSsql server方法

需要下载安装Microsoft Drivers for PHP for SQL Server驱动&#xff0c; https://download.csdn.net/download/tjsoft/90568178 实操Win2008IISphp7.4.3连接SqlServer2008数据库所有安装包资源-CSDN文库 适用于 SQL Server 的 PHP 的 Microsoft 驱动程序支持与 SQL Server …

macOS设置定时播放眼保健操

文章目录 1. ✅方法一&#xff1a;直接基于日历2. 方法二&#xff1a;基于脚本2.1 音乐文件获取(ncm转mp3)2.2 创建播放音乐任务2.3 脚本实现定时播放 1. ✅方法一&#xff1a;直接基于日历 左侧新建一个日历&#xff0c;不然会和其他日历混淆&#xff0c;看起来会有点乱 然后…

记录学习的第二十三天

老样子&#xff0c;每日一题开胃。 我一开始还想着暴力解一下试试呢&#xff0c;结果不太行&#x1f602; 接着两道动态规划。 这道题我本来是想用最长递增子序列来做的&#xff0c;不过实在是太麻烦了&#xff0c;实在做不下去了。 然后看了题解&#xff0c;发现可以倒着数。 …

SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题

SpringBoot整合sa-token&#xff0c;Redis&#xff1a;解决重启项目丢失登录态问题 &#x1f525;1. 痛点直击&#xff1a;为什么登录状态会消失&#xff1f;2.实现方案2.1.导入依赖2.2.新增yml配置文件 3.效果图4.结语 &#x1f600;大家好&#xff01;我是向阳&#x1f31e;&…

哈希表(开散列)的实现

目录 引入 开散列的底层实现 哈希表的定义 哈希表的扩容 哈希表的插入 哈希表查找 哈希表的删除 引入 接上一篇&#xff0c;我们使用了闭散列的方法解决了哈希冲突&#xff0c;此篇文章将会使用开散列的方式解决哈希冲突&#xff0c;后面对unordered_set和unordered_map的…

[蓝桥杯] 挖矿(CC++双语版)

题目链接 P10904 [蓝桥杯 2024 省 C] 挖矿 - 洛谷 题目理解 我们可以将这道题中矿洞的位置理解成为一个坐标轴&#xff0c;以题目样例绘出坐标轴&#xff1a; 样例&#xff1a; 输入的5为矿洞数量&#xff0c;4为可走的步数。第二行输入是5个矿洞的坐标。输出结果为在要求步数…

远程监控系统项目里练习

1、项目目标 设备端&#xff1a; &#xff08;1&#xff09;基于stm32mp157开发板&#xff0c;裁剪linux5.10.10&#xff0c;完成ov5640摄像头移植&#xff1b; &#xff08;2&#xff09;完成用户层程序&#xff0c;完成对摄像头的控制及与云端服务的数据交互。 云端&…

安装并配置Maven

如图所示&#xff0c;解压安装包&#xff0c;配置环境变量&#xff0c;在bin目录那个界面新建文件夹repository&#xff0c;写上安装路径的坐标&#xff0c;修改Maven仓库镜像&#xff0c;输入cmd验证是否安装成功 <mirror><id>alimaven</id><mirrorOf>…

PlatformIO 自定义脚本选择编译库源文件 - 设置只用于C++ 的编译选项

PlatformIO 只支持以文件夹为单位选择要编译的源文件&#xff0c;不像Keil 或者CMake&#xff0c;可以手动控制每一个源文件。而且默认只会将库的src 文件夹下的源文件全部加入编译。比如&#xff0c;某个库的文件结构如下&#xff1a; libx src include mem| a.c| b.c| c.c…

dolphinscheduler单机部署链接oracle

部署成功请给小编一个赞或者收藏激励小编 1、安装准备 JDK版本:1.8或者1.8oracle版本&#xff1a;19Coracle驱动版本&#xff1a;8 2、安装jdk 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8 下载后上传到/tmp目录下。 然后执行下面命…

MongoDB常见面试题总结(上)

MongoDB 基础 MongoDB 是什么&#xff1f; MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统&#xff0c;由 C 编写的。MongoDB 提供了 面向文档 的存储方式&#xff0c;操作起来比较简单和容易&#xff0c;支持“无模式”的数据建模&#xff0c;可以存储比较复杂…

MATLAB2024a超详细图文安装教程(2025最新版保姆级教程)附安装钥

目录 前言 一、MATLAB下载 二、MATLAB安装 二、MATLAB启动 前言 MATLAB&#xff08;Matrix Laboratory&#xff09;是由MathWorks公司开发的一款高性能的编程语言和交互式环境&#xff0c;主要用于数值计算、数据分析和算法开发。内置数学函数和工具箱丰富&#xff0c;开发…

基于 Spring Boot 瑞吉外卖系统开发(二)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;二&#xff09; 员工登录功能实现 员工登录页面login.html存放在/resources/backend/page/login目录下。 启动项目&#xff0c;在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面。…

软考系统架构设计师之大数据与人工智能笔记

一、大数据架构设计 1. 核心概念与挑战 大数据特征&#xff1a;体量大&#xff08;Volume&#xff09;、多样性&#xff08;Variety&#xff09;、高速性&#xff08;Velocity&#xff09;、价值密度低&#xff08;Value&#xff09;。传统数据库问题&#xff1a;数据过载、性…

146. LRU 缓存 带TTL的LRU缓存实现(拓展)

LRU缓存 方法一:手动实现双向链表 哈希表 struct Node{int val;int key;Node* prev;Node* next;Node(int a, int b): key(a), val(b), prev(nullptr), next(nullptr) {}Node():key(0), val(0), prev(nullptr), next(nullptr) {} }; class LRUCache { private:Node* removeTai…

浅层神经网络:全面解析(扩展)

浅层神经网络&#xff1a;全面解析&#xff08;扩展&#xff09; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、神经网络架构演进图谱 #mermaid-svg-…

Qt 事件系统负载测试:深入理解 Qt 事件处理机制

Qt 事件系统负载测试&#xff1a;深入理解 Qt 事件处理机制 文章目录 Qt 事件系统负载测试&#xff1a;深入理解 Qt 事件处理机制摘要引言实现原理1. 自定义事件类型2. 事件队列管理3. 性能指标监控4. 事件发送机制 性能监控实现1. 负载计算2. 内存监控3. 延迟计算 使用效果优化…

Unity3D仿星露谷物语开发33之光标位置可视化

1、目标 当从道具栏中拖出一个道具到地面的时候&#xff0c;光标区域会显示是否可放置物体的可视化显示。绿色表示可以放置物体&#xff0c;红色表示不可以放置物体。 2、优化InventoryManager脚本 添加2个方法&#xff1a; /// <summary>/// Returns the itemDetails&…