在十四届蓝桥杯开赛前一星期开始复习

文章目录

    • 十三届蓝桥杯国赛原题
      • 1.2022
      • 2.钟表
      • 3卡牌
      • 4最大数字
      • 4.5 Dijkstra算法
      • 5出差

十三届蓝桥杯国赛原题

1.2022

在这里插入图片描述

#include<iostream>
using namespace std;

long long int f[2023][11][2023];  //表示前2022个物品选择10个物品,体积总和为2022的方案个数  ,,数组下标为1开始,所以使2023,11,2023

int i, j, k;
int main()
{
    for (i = 0; i <= 2022; i++)  //因为体积为0,物品为0的所有情况都只有一种选择,即什么都不选
        f[i][0][0] = 1;
    for (i= 1; i <= 2022; i++)  //枚举所有物品
    {
        for (j = 1; j <= 10; j++)   //选了几个物品
        {
            for (k = 1; k <= 2022; k++)  //枚举体积
            {
                f[i][j][k] = f[i-1][j][k];  //不选第i个物品
                if (k >= i)  //选第i个物品
                    f[i][j][k] += f[i-1][j - 1][k - i];
            }
        }
    }
    cout << f[2022][10][2022];
    return 0;
}

2.钟表

试题 B: 钟表
【问题描述】
在 12 小时制的钟表中,有分针、时针、秒针来表示时间。记分针和时
针之间的夹角度数为 A(0 ≤ A ≤ 180)、分针和秒针之间的夹角度数为 B(0 ≤ B ≤ 180)。而恰好在 s 时 f 分 m 秒时,满足条件 A = 2B 且 0 ≤ s ≤ 6; 0 ≤ f < 60;0 ≤ m < 60,请问 s, f, m 分别是多少。
注意时针、分针、秒针都围绕中心匀速转动。
提交格式为三个由一个空格隔开的整数,分别表示 s, f, m。如 3 11 58表示
3 点 11 分 58 秒
问题解析
本人答案是:4 48 0.
我是这么想的,常见的那种时钟,分针和秒针走了,时针也是会跟着走的,比如有的人可能想着是6 0 15这样,但是秒针走了时针和分针其实也在走,严格来说此时分针和秒针并不是90度,分针和时针也不是180度,所以我认为是不行的。
我们知道秒针走一圈(360度)是60秒,即秒针一秒钟可以走6度;分针60分钟走一圈,即10秒钟走1度;时针12小时走一圈,即120秒走一度。根据范围我们知道我们可以枚举的最大时间是6小时59分59秒,即25199秒,我们只要从0枚举到25199,通过秒数算出分针、时针和秒针走过的角度,相减后得到角A和角B,再判断是否满足A=2*B即可。算出来后发现有两个结果:0 0 0和4 48 0,0 0 0被官方发公告ban了,所以我写的是4 48 0.
————————————————
版权声明:本文为CSDN博主「你好_Ä」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fnmdpnmsl/article/details/125347764

#include<bits/stdc++.h>
using namespace std;
int main()
{
    for(int i = 0; i < 25960 ; i++)
    {
        double m = (double) 1/10.0 * i ;
        double h = (double) 36 / 4320 * i ;
        double s = (double)  6 / 1.0 * i ;

        while(m > 360) m -= 360 ;
        while(s > 360) s -= 360 ;
        double a , b ;
        a = abs(m - h);
        b = abs(m - s);
        if(a == 2 * b) cout << i / 3600 << " " << i / 60 % 60 << " " << i % 60 << endl;
    }
    return 0;
}

3卡牌

2.解题思路
从题意出发,发现想直接求出答案,并没有一个很高效的办法,但如果给定我们一个 x ,让我们去判断能否凑出 x套牌,这个操作对我们来说并不难。所以我们可以考虑二分答案的做法,既然要二分那肯定得具有两段性,不难理解,如果我们可以凑出x xx套牌,那么[1,x−1]套牌也都是一定可以凑出来的,而并不一定可以凑出大于x xx的套牌数。
那么二分的check判断函数我们该如何书写呢?显然要凑够x套牌,我们需要使得每种类似的牌都有x xx张,如果已经当前判断牌的类型的数量已经大于等于x ,则不需要使用空白牌补充。如果使用当前类型的牌数加上它最多可加上的空白牌数仍然小于x ,那么此时可以直接返回false了。如果当前牌类型允许补充空白牌的数量足够给我们进行补充到 x,那么我们让空白牌的数减去需要使用的数量,如果不够用了,那么也返回false,如果可以完成所有的牌的填充,则返回true。
另外一个需要注意的点是r 的上限,以及m 的范围。m 的最大范围已经超出int,所以我们要使用long long,另外n 的最大范围是2×10^5
,而m 最大取到n^2
,能凑出的最大套牌数应该是2n,所以r的上限一定不能设小了。
整体做法的时间复杂为:O(nlogn)
————————————————
版权声明:本文为CSDN博主「执 梗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57487901/article/details/127124262

#include <iostream>
using namespace std;
typedef long long ll ;
const int N = 2e5 + 10;
ll n , m ;
int a[N] , b[N];
bool check(int mid , int a[] , int b[])
{
  ll ans = m;
	for (int i = 0; i < n; i++)
	{
		if (a[i] < mid)
		{
			if (mid - a[i] > b[i] || mid - a[i] > ans)return false;
			else ans -= mid - a[i];
		}
	}
	return ans >= 0;

  //bool flag = true ;
   //for(int i = 0 ; i < n ; i++) 
   //{
   //  if(a[i] + b[i] < m) flag = false;
  // }
   //return flag;
}
int main()
{
  cin >> n >> m ;
  for(int i = 0 ; i < n ; i++) cin >> a[i];
  for(int i = 0 ; i < n ; i++) cin >> b[i];
  int l = 0 , r = 2*N ;
  while(l < r)
  {
    int mid = l + r + 1 >> 1;
    if(check(mid , a , b))   l = mid ;
    else  r = mid - 1 ;
  }
  cout << l ;
  // 请在此输入您的代码
  return 0;
}

4最大数字

看上去N的范围貌似很大,达到了1e17的范围,但其实我们最多只需要考虑这最多17位数,所以可以想到爆搜得到答案。
一个数的大小是从左到右依次判断,所以我们从最左边开始枚举,我们无需关注后面的数,要利用自己的1号操作和2号操作保证当前这个数位的数一定要尽可能最大
然后分别考虑两种操作,首先两种操作不可能混用,因为它们是抵消的效果,所以要么对这个数全使用1操作,要么2操作。假设某个数位的值为x,首先考虑1号操作,使用后可以让该数位变大,出于贪心考虑,我们想让它变成9,那么需要进行9-x次1号操作,当然可能此时1号操作并不足以让我们将x变成9,但我们还是使用剩余的全部的次数将其变大,所以每次考虑1号操作应该使用的操作数t应该为t=min(n,9-x),此时x将变为x+t,然后进行下一位的判断。
其次我们考虑2号操作,这个的判断比较简单,它是让某个值减小,唯一能让某个数变大的机会就是将其减到0后再减就会变成9。那么这样操作需要的次数就是x+1,如果操作次数不够,那我们宁愿不使用,因为这只会让这个数位变得更小。
在深搜dfs的过程中,参数记录遍历到第几个数位以及此时累计的和,当搜索完所有数位后,将此时的和与答案进行一个取max,最后的值则为答案。
————————————————
版权声明:本文为CSDN博主「执 梗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57487901/article/details/127150940

#include <iostream>
using namespace std;
string s ;
int a,b;
long long ans = 0 ;
void dfs(int i , long long v)
{
  int m = s[i] - '0' ;
  if(s[i]) 
  {
    int t = min(a,9-m);
    a -= t;
    dfs(i+1, v*10 + m + t);
    a += t ;
    if(b > m)
    {
      b -= m +1  ;
      dfs(i + 1 , v * 10 + 9) ;
      b += m + 1 ;
    }
  }
  else 
  {
    ans = max(ans , v);
  }
}
int main()
{
  cin >> s >> a >> b ;
  dfs(0,0);
  cout << ans ;
  return 0;
}

4.5 Dijkstra算法

acwing例题:Dijkstra求最短路I

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
const int N = 510 ;
int g[N][N];
int n , m ;
bool st[N];
int d[N];
int dijkstra()
{
    memset(d,0x3f,sizeof d);
    d[1] = 0;
    for(int i = 1 ; i <= n ; i++)
    {
        int t = -1 ;
        for(int j = 1 ; j <= n ; j++)
        {
            if(!st[j] && (t == -1 || d[t] > d[j]))
            {
                t = j ;
            }
        }
        
        st[t] = true;
        
        for(int j = 1 ; j <= n ; j++)
        {
            d[j] = min(d[j] , d[t] + g[t][j]) ; 
        }
    }
    
    if(d[n] == 0x3f3f3f3f) return -1;
    return d[n];
}
int main()
{
    cin >> n >> m ;
    memset(g, 0x3f, sizeof g);
    while(m--)
    {
        int a , b, c ;
        cin >> a >> b >>c ;
        g[a][b] = min(g[a][b] , c);
    }
    int t = dijkstra();
    cout << t;
    return 0;
}

5出差

题意很明显考察的是一个最短路径问题,虽然题目说了给定的是双向边,但是假设g[i]的含义是到达i城市需要隔离的时间。假设有城市A和城市B,且两城市存在一条权值为w的双向边,当我们从A去到B所需要花费的时间应该是w+g[B],当我们从B去到A所花的时间应该是w+g[A]。所以虽然题意是双向边,但是方向不同的情况下,权值并不一定相同,所以我们应该看成两条边。
也就是说,存在邻接矩阵gra[][],gra[i][j]表示从i到j的所需要的时间,g[i][j]和g[j][i]并不一定是相等的。所以我们在建图时应该分清楚,需要注意的是终点n的隔离时间我们是不考虑的,所以我们要把它置为0。然后建图完毕后直接跑一遍最短路算法即可,由于n nn的最大只有1000,所以使用朴素dijkstra算法也是能过的。
————————————————
版权声明:本文为CSDN博主「执 梗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57487901/article/details/127132577

#include<bits/stdc++.h>
using namespace std;
const int N = 1010 ;
int w[N];
int g[N][N] ;
int n , m ;
bool st[N];
int d[N];
int dijkstra()
{
  memset(d , 0x3f , sizeof d);
  d[1] = 0 ;
  for(int i = 1; i <= n ; i++)
  {
    int t = -1 ;
    for(int j = 1 ; j <= n ; j++)
    {
      if(!st[j] && (t == -1 || d[t] > d[j]))
        t= j ;
    }

      for(int j = 1 ; j <= n ; j++)
        d[j] = min(d[j] , d[t] + g[t][j]);

      st[t] = true ;
  }
  return d[n];
}
int main()
{
  cin >> n >> m;
  for(int i = 1 ; i <= n ; i++) cin >> w[i];
  w[n] = 0;
  memset(g , 0x3f , sizeof g);
  while(m--)
  {
    int a,b,c;
    cin >> a >> b >> c;
    g[a][b] = w[b] + c;
    g[b][a] = w[a] + c;
  }
  cout << dijkstra() ;
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

入门编程其实也简单

随着信息技术的快速发展&#xff0c;编程已经成为一个越来越重要的技能。那么&#xff0c;我们该如何入门编程呢&#xff1f; 编程是指使用计算机语言编写计算机程序的过程。计算机程序是一系列指令的集合&#xff0c;这些指令告诉计算机要执行的操作。编程的目的是创建计算机…

Unity编辑器扩展-第二集-按钮排序/分组/放入右键菜单

第一集链接&#xff1a;Unity编辑器扩展-第一集-在菜单栏加入自己的按钮_菌菌巧乐兹的博客-CSDN博客 一、本节目标效果展示 1.按钮排序 变成 2.按钮分组 仔细看&#xff0c;有个灰色的杠杠 3.放入右键菜单 4.皮一下 二、按钮排序具体流程 第一集讲&#xff0c;如果想放入…

阿里云PAIx达摩院GraphScope开源基于PyTorch的GPU加速分布式GNN框架

作者&#xff1a;艾宝乐 导读 近期阿里云机器学习平台 PAI 团队和达摩院 GraphScope 团队联合推出了面向 PyTorch 的 GPU 加速分布式 GNN 框架 GraphLearn-for-PyTorch(GLT) 。GLT 利用 GPU 的强大并行计算性能来加速图采样&#xff0c;并利用 UVA 来减少顶点和边特征的转换和…

4.4.2 译码器

1. 学习基础知识&#xff1a;首先&#xff0c;我会了解译码器的基本概念、原理和应用。通过阅读教科书、参考资料或在线资源&#xff0c;我会学习译码器的工作原理、不同类型的译码器以及它们在电子系统中的应用场景。 2. 研究示例和练习题&#xff1a;为了更好地理解译码器的…

【Spring】透过Spring源码查看Bean的命名转换规则

近期在写Spring项目的时候&#xff0c;需要通过注解的形式去替代之前直接将Bean存放在Spring容器这种方式&#xff0c;以此来简化对于Bean对象的操作&#xff0c;但是这样无法通过准确的Id去获取到相应的Bean对象了 测试观察 首先&#xff0c;如果要将指定的对象存放到Spring中…

Unity入门6——光源组件

一、参数面板 二、参数介绍 Type&#xff1a;光源类型 Spot&#xff1a;聚光灯 Range&#xff1a;发光距离Spot Angle&#xff1a;光锥角度Directional&#xff1a;方向光Point&#xff1a;点光源Area&#xff08;Baked Only&#xff09;&#xff1a;面光源 仅烘焙。预先算好&…

操作教程:如何正确配置让EasyNVR级联至EasyNVS平台?

EasyNVS是EasyNVR的云管理平台&#xff0c;可实现内网监控上云&#xff0c;视频汇聚等功能。近期经常有用户咨询EasyNVR如何级联至EasyNVS平台进行云端统计和管理&#xff0c;在今天的文章中&#xff0c;我们来详细介绍一下。 1、配置EasyNVS 1&#xff09;运行EasyNVS之前&a…

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于GRU-AdaBoost门…

C++【STL】之vector的使用

文章目录&#xff1a; vector介绍vector使用1. 默认成员函数1.1 默认构造1.2 拷贝构造1.3 析构函数1.4 赋值重载 2. 迭代器2.1 正向迭代器2.2 反向迭代器 3. 容量操作3.1 获取空间数据3.2 空间扩容3.3 大小调整3.4 空间缩容 4. 数据访问4.1 下标随机访问4.2 获取首尾元素 5. 数…

基于Java新生报到系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

Spring源码解密--事务篇

文章目录 一、事务的实现方式1、JDBC2、Spring基于xml配置编程式事务声明式事务 二、源码设计1、TransactionManager1&#xff09;TransactionManager2&#xff09;PlatformTransactionManager3&#xff09;ReactiveTransactionManager 2、TransactionDefinition3、Transaction…

Qt编写onvif工具(搜索/云台/预置位/OSD/录像存储)

一、前言 从最初编写这个工具开始的时间算起来&#xff0c;至少5年多&#xff0c;一直持续完善到今天&#xff0c;这个工具看起来小也不小大也不大&#xff0c;但是也是经历过无数个现场的洗礼&#xff0c;毫不夸张的说&#xff0c;市面上能够遇到的主流的厂商的设备&#xff…

攻防世界-Crypto-easychallenge

题目描述&#xff1a;将文件下载下来&#xff0c;只有一个pyc文件 1. 思路分析 先向chatgpt问下什么是pyc文件&#xff1a; OK&#xff0c;这里简单总结下&#xff1a; 1. pyc文件是python源码编译后的生成的二进制文件 2. 通过一些库可以逆向出pyc的源代码 那么我们需要做…

科一容易忘、容易混的点(二)

注意落石 高速应急车道用途&#xff1a;主要用于发生事故或故障时停车&#xff0c;以及专为救险所用的车道&#xff0c;被誉为高速公路的“生命通道” 注意 注意 扣9份场景&#xff1a; 城市快速路上 违法停车&#xff1b; 注意 交通事故逃逸&#xff0c; 不一定吊销驾驶证&a…

简单的一批的DockerFile构建(内附超详细docker学习笔记)

目录 介绍 DockerFile常用保留字指令 演示自定义构建java8版本centos docker专用学习笔记 超全 介绍 总结: 从应用软件的角度来看&#xff0c;Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段&#xff0c; * Dockerfile是软件的原材料 * Docker镜像是软件…

华为组播实验pim-dm

组播源配置&#xff1a; R1: [r1]dis current-configuration [V200R003C00] sysname r1 snmp-agent local-engineid 800007DB03000000000000 snmp-agent clock timezone China-Standard-Time minus 08:00:00 portal local-server load flash:/portalpage.zip drop illegal-mac…

Java调用Midjourney进行AI画图原生版抓包实现支持中文

用途介绍 Midjourney是一个目前优秀的AI画图工具&#xff0c;不挂梯无法直接访问 本代码主要用于搭建镜像站使用 适合人群 本代码不适合新手&#xff0c;建议使用过okhttp、且具有二开能力的同学使用~ 实现原理 通过调用发送信息接口发送请求&#xff0c;通过轮询房间消息…

一、PyTorch基础

一、PyTorch基本操作 1&#xff0c;导包 import torch2&#xff0c;查看版本号 torch.__version__ """ 2.0.1cpu """3&#xff0c;初始化(全零)矩阵 x torch.empty(3,2) x """ tensor([[7.2868e-44, 8.1275e-44],[6.7262e-4…

AST使用(二)

//在此之前&#xff0c;先了解下path和node/*path指的是路径 其常用的方法当前路径所对应的源代码 : path.toString判断path是什么type&#xff0c;使用path.isXXX 这个方法 : if(path.isStringLiteral()){}获取path的上一级路径 : let parent path.parentPath;获取path的子…

ARM基础(3):MPU内存保护单元详解及例子

MPU(Memory Protection Unit)是ARM处理器中的一个特性&#xff0c;它提供了内存保护和访问控制的功能&#xff0c;通常用于实现操作系统的内存隔离和保护。比如我们可以设置所有的RAM为不可执行&#xff0c;这样就可以避免代码注入攻击。最近做项目过程中&#xff0c;使用的几个…