算法竞赛入门【码蹄集进阶塔335题】(MT2301-2305)

news2024/11/27 4:34:56

算法竞赛入门【码蹄集进阶塔335题】(MT2301-2305)


文章目录

  • 算法竞赛入门【码蹄集进阶塔335题】(MT2301-2305)
  • 前言
      • 为什么突然想学算法了?
      • 为什么选择码蹄集作为刷题软件?
  • 目录
    • 1. MT2301 47论
    • 2. MT2302 数的增殖
    • 3. MT2303 传染病
    • 4. MT2304 magic
    • 5. MT2305 集装箱
    • 结语


前言

在这里插入图片描述

为什么突然想学算法了?

> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~

在这里插入图片描述


为什么选择码蹄集作为刷题软件?

码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。
在这里插入图片描述


目录

1. MT2301 47论

(1)题目描述
小码哥数是只含有4,7,且4的位数等于7的位数的数字。

请你寻找大于等于n( 1≤n ≤1000000000)的最小小码哥数。

格式

输入格式:
输入包含一个整数n(1≤n ≤109)。
.
输出格式: 输出大于等于n的最小小码哥数。

样例1

输入格式: 4500
.
输出格式: 4747

(2)参考代码

#include<bits/stdc++.h> 
using namespace std;
set<long long int> s;
void dfs(int four,int seven,long long int num){
    if(four==seven) s.insert(num);
    if(four==0&&seven==0) return;
    if(seven>=1){
        dfs(four,seven-1,num*10+7);
    }
    if(four>=1){
        dfs(four-1,seven,num*10+4);
    }
}
int main( )
{
    long long int n;
    cin>>n;
    for(int i=1;i<=5;i++) dfs(i,i,0);
    for(long long int i:s){
        if(i>=n){
            cout<<i;
            break;
        }
    }
    return 0;
}

2. MT2302 数的增殖

(1)题目描述

给定一个数n (n <1000),可以按以下方法进行增殖:1.取原数最高位,在左边加上不大于最高位一半的数,2.不作处理,现在问最多能生成多少个不同的数。

格式

输入格式:
第1行包含一个正整数n。
.
输出格式: 一个正整数,输出最多生成的数的个数。

样例1

输入: 5
.
输出: 4

(2)参考代码

import time
from typing import List,Tuple
from collections import deque,Counter
from queue import PriorityQueue
import math
from functools import lru_cache
import random
import copy
import sys
sys.setrecursionlimit(99999999)


def main():
    x = int(input()[0])
    @lru_cache(typed=False,maxsize=128000000)
    def dp(val):
        if val == 1:
            return 1
        
        tot=1
        for v in range(1,(val>>1)+1):
            tot += dp(v)
        return tot

    print(dp(x))

if __name__ == '__main__':
    main();

3. MT2303 传染病

(1)题目描述
小码哥正在研究传染病的相关知识,现在遇到了这么一个问题:有一个长为n,宽为m,高为k(层数)的长方体,它可以看成n x mxk个1×1×1大小的单位正方体。每个单位正方体都有一个字符。””表示该位置防疫措施不好,如果被传染了就会感染病毒。”#”表示该区人民防疫措施良好,永远不会感染病毒(甚至都不会成为病毒的携带者)。

现在在长方体的最顶层(层号为1)某个位置,因实验室泄露爆发了病毒。每过一个单位时间,病毒将扩散至周围6个方向的地区。如果某个地区为”#”,那么一定不会被感染并且不会携带病毒同时也不会传播病毒。(但如果这个地方存在泄露的实验室,那么哪怕防疫措施再好也会被感染以及传播病毒)﹒

现在小码哥需要知道,假如第一层坐标为(a, y)的实验室泄露了病毒,那么最多会有多少区域被感染。


格式

输入格式:
第一行三个正整数k,n,m ( k, n, m ≤ 10 ) ,接下来k层,每层n行,每行m个字符,表示长方体每个单位的状态,最后一行两个正整数x,y ( a ≤n, y ≤m )表示发生泄漏的实验室的坐标(这个实验室在第一层)。
.
输出格式: 按题目要求输出一行一个整数表示答案。

样例1

输入格式:
3 3 3

.#.
.###
##.

.##

##.

… … …

1 1
.
输出格式: 13

(2)参考代码

#include<iostream>
using namespace std;
char li[11][11][11];
int Count = 0;
int countMax = 0;
int n, m, k;
void ganran(int x, int y, int z)
{
    Count++;
    li[x][y][z] = '*';
    if (x - 1 > 0 && li[x - 1][y][z] == '.')//向左感染
        ganran(x - 1, y, z);
    if (x + 1 <= n && li[x + 1][y][z] == '.')//向右感染
        ganran(x + 1, y, z);
    if (y - 1 > 0 && li[x][y - 1][z] == '.')//向后感染
        ganran(x, y - 1, z);
    if (y + 1 <= m && li[x][y + 1][z] == '.')//向前感染
        ganran(x, y + 1, z);
    if (z - 1 > 0 && li[x][y][z - 1] == '.')//向上感染
        ganran(x, y, z - 1);
    if (z + 1 <= k && li[x][y][z + 1] == '.')//向下感染
        ganran(x, y, z + 1);
}
int main()
{
    cin >> k >> n >> m;
    for (int _k = 1;_k <= k;_k++)
        for (int _n = 1;_n <= n;_n++)
            for (int _m = 1;_m <= m;_m++)
                cin >> li[_n][_m][_k];
    int sx, sy;
    cin >> sx >> sy;
    ganran(sx, sy, 1);
    cout << Count;
    return 0;
}

4. MT2304 magic

(1)题目描述
魔法阵是一个n x m的格子(高n,宽m ) , n x m为偶数。小码哥手中有n x m个宝石(以1 ~ n x m编号)。小码哥从最右上角的格子开始走,从一个格子可以走到上、下、左、右4个相邻的格子,但不能走出边界。每个格子必须且仅能到过1次,这样小码哥一共走了n x m个格子停止(随便停哪里)。小码哥每进入一个格子,就在该格子里放入一颗宝石。他是按顺序放的,也就是说——第i个进入的格子放入à号宝石。

如果两颗宝石的编号对nx m÷2取模的值相同,则认为这两颗宝石相互之间有微妙的影响。也就是说,我们按照宝石的编号对n x m÷2取模的值,将宝石分成nx m÷2对,其中每对都恰有两颗宝石。对于每一对宝石,设第一颗宝石在第α行第b列,另一颗宝石在第c行第d列,那么定义这2个宝石的魔力影响值为x |a 一 c| +k× (b- d。需要你求出的是,在所有合乎题意的宝石摆放方案中,所有成对的宝石间的最大魔力影响值的最小值为多少。换句话说,如果我们定义对n x m÷2取模的值为i的一对宝石的魔力影响值为a[团]。你需要求出的就是maa { a[i][i= 0,1,2…}的最小值。


格式

输入格式:
只有一行用空格隔开的4个正整数,分别是n、m、k1、k2。(4≤n ×m≤50,0<k1,k2≤32767) 。
.
输出格式: 只需输出一个整数,即题目所要求的“所有成对的宝石间的最大魔力影响值的最小值”。

样例1:

输入: 2 2 2 2

输出:4

(2)参考代码

#include<bits/stdc++.h>
using namespace std;
int t,n,m,k1,k2,ans=0x3f3f3f3f;
int dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1};//四个方向
int num[60][2];//用于第一次记录,下面会提
bool vis[60][60];//标记走过没
inline void dfs(int x,int y,int sum,int maxn)//x表示当前x坐标,y表示当前y坐标,sum表示当前步数,maxn表示当前最大值
{
    if(vis[x-1][y]&&vis[x+1][y]&&!vis[x][y+1]&&!vis[x][y-1])return;//可行性剪枝1
    if(vis[x][y-1]&&vis[x][y+1]&&!vis[x+1][y]&&!vis[x-1][y])return;//可行性剪枝2
    if(sum<=t)num[sum][0]=x,num[sum][1]=y;//记录,这里t指一半
    else
    {
        maxn=max(maxn,k1*abs(num[sum-t][0]-x)+k2*abs(num[sum-t][1]-y));//进行计算并更新
        //return;
    }
    if(sum>=n*m)
    {
        ans=min(ans,maxn);//如果遍历完,那么更新答案
        return;
    }
    if(maxn>=ans)return;//最优性剪枝
    
    for(int i=1;i<=4;i++)//四个方向枚举
    {
        int a=x+dx[i],b=y+dy[i];
        if(!vis[a][b])
        {    
            vis[a][b]=1;
            dfs(a,b,sum+1,maxn);
            vis[a][b]=0;//回溯
        }
    }
    
}
int main()
{
    cin>>n>>m>>k1>>k2;
    t=n*m/2;
    for(int i=0;i<=m+1;i++)
    {
        vis[0][i]=1;
        vis[n+1][i]=1;
    }//在外围加个边框1
    for(int i=0;i<=n+1;i++)
    {
        vis[i][0]=1;
        vis[i][m+1]=1;
    }//在外围加个边框2
    vis[1][1]=1;//初始标记
    dfs(1,1,1,0);
    cout<<ans<<endl;
    return 0;
}

5. MT2305 集装箱

(1)题目描述
码头上的工人们在给出口的菠萝装船,船有两艘,从键盘输入它们的载重α和b。菠萝分装在k个集装箱里面,k和每个集装箱的重量从键盘输入,请判断工人们是否能够成功将这些菠萝装船(集装箱不可拆分)。


格式

输入格式:
依次输入a,b,k以及k个集装箱的重量,空格分隔,1≤a,b ≤5000,2 ≤k ≤10,0≤每个集装箱的重量≤3500。
.
输出格式: 可将装船则输出yes ,否则输出no 。

样例1

输入格式: 54 100 5 26 50 30 23 25
.
输出格式: no

(2)参考代码

#include<bits/stdc++.h>
 using namespace std;
 int c1,c2,n;
 int boxw[10]; 
 int sum=0;
int bestC1;
int weight_cur;

void backtrack(int a){
 if(a==n){
 if(weight_cur>bestC1)
 bestC1 = weight_cur;
return;
 }

 if(weight_cur+boxw[a] <= c1){
 weight_cur+= boxw[a];
 backtrack(a+1);
 weight_cur-= boxw[a];
 }
 backtrack(a+1);
 }
 int main( )
 {
 cin>>c1>>c2>>n;

 for(int i=0;i<n;i++){
 cin>>boxw[i];
 sum+=boxw[i];
 }

 bestC1 = weight_cur = 0;
 backtrack(0);
 if(sum-bestC1 <= c2){
 cout<<"yes"<<endl;
 }else{
 cout<<"no"<<endl;
 } return 0;
}

结语

感谢大家一直以来的不断支持与鼓励,码题集题库中的进阶塔350题正在逐步更新,之后会逐步跟进星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?

另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~

愿你的结局,配得上你一路的颠沛流离。

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

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

相关文章

笔试强训2

题目1&#xff1a; 倒置字符串_牛客题霸_牛客网 我们先写出代码&#xff1a; #include<iostream> #include<string> using namespace std; int main() {string s;getline(cin, s);reverse(s.begin(), s.end());auto start s.begin();while (start ! s.end()){au…

AS 打一个正式签名的包

如何打一个带正式签名文件的app (给自己的劳动成果冠名) 1. 选择build -> generate signed bundle/apk 2. 这里有两个选择, bundle or apk, 我们选择apk 于是勾选 apk, 并点下一步 3. 来到选择证书文件的地方, 但是我们这是第一次做, 还没有证书文件, 所以选择新建一个证…

车路协同云控平台建设实践

前言 随着汽车工业水平飞速发展&#xff0c;以及 IoT、5G、V2X 等信息通信技术的发展演进&#xff0c;通过汽车的智能化、网联化升级为大众带来更智能、更便捷的驾乘体验&#xff0c;成为汽车行业的发展趋势&#xff0c;自动驾驶、智能网联汽车成为行业热点。近年来&#xff0…

Dubbo集成Nacos作为注册中心

Nacos简介 什么是Nacos? Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#…

数据要素市场研究资料合集

编 辑&#xff1a;彭文华来 源&#xff1a;大数据架构师彭友们好&#xff0c;我是老彭。最近有个博士彭友在为论文挠头&#xff0c;到处找数据要素市场的资料。正好&#xff0c;国家工业信息安全发展研究中心刚刚发布《中国数据要素市场发展报告&#xff08;2021-2022&#xff…

智能合约介绍

介绍 智能合约是区块链实现可编程化的重要工具&#xff1b;在比特币时期&#xff0c;脚本仅限于描述交易得到内容和状态&#xff1b;随着智能合约的出现可以定义任何数据对象的状态擦欧总——>使其成为网络上的“法律条文”或者“商业共识”。相当于网络中的道德准则&#…

基于GIS的生态安全网络格局构建之主成分分析

来源&#xff1a;GIS前沿 一、数据来源介绍 &#xff08;一&#xff09;数字高程数据、归一化植被指数数据 本文所用到的松原市宁江区数字高程数据采用30 m分辨率的GDEMV 3数字高程数据、归一化植被指数数据采用250m分辨率的MYD13Q1植被指数16天合成产品&#xff0c;这些数据…

【零基础入门SpringMVC】第五期——报文、文件转移、拦截器、异常处理器

一、HttpMessageConverter 代表报文信息转化器&#xff0c;可以将请求报文转换为Java对象&#xff0c;也可以将Java对象转换为响应报文 请求报文分为三部分&#xff1a;请求头、请求空行和请求体 post 请求才会生成请求体get 请求会把请求信息拼接到地址后 概述&#xff1a;这…

经验分析:数据可视化工具入门讲解,如何应用数据可视化

什么是数据可视化&#xff1f;最核心的要点&#xff0c;就是解释数据、进行信息传递、压缩数据信息、突出整体观点。 在分析过程中&#xff0c;通过比较数据的大小、差异、分布&#xff0c;让其轻松呈现。 今天小编给大家介绍一款优秀的在线数据可视化软件。 项目是个人创建的…

第一性原理谈安全性和可靠性

已剪辑自: https://mp.weixin.qq.com/s/jttd-dhv9PmNu25Z-zyd5Q 最近从各个行业对系统的安全性的关注度越来越高&#xff0c;10月28日&#xff0c;工信部公开征求的《道路机动车辆生产准入许可管理条例&#xff08;征求意见稿&#xff09;》中&#xff0c;第六条提出&#xff…

C语言航路外传之隐式转换与优先级的那点事(你程序总是出bug的一个重要原因)

目录 一、表达式求值 二、隐式类型转换 1.基本概念 2.整型提升的意义 3.详解截断与整型提升的过程 4.char类型范围有关的一些事情 5.有关整形提升的一些案例 三、算术转换 四、操作符的属性 1.优先级表格 2.运算规则 3.一些问题表达式 &#xff08;1&#xff09;a…

Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理

Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理 目录 Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理 一、简单介绍 二、tftp 下载安装 三、arm linux 通过tftp 下载 windows 上的文件 四、tftp 命令相关说明 1、busybox tftp命令常…

Baklib|知识库应用场景:制作员工培训手册

持续的专业发展对于想要加入、保留和提升员工的组织来说是必不可少的。为了确保员工总是能从学习能力中受益&#xff0c;您需要考虑创建培训手册&#xff0c;使员工能够胜任并保持他们的工作能力。 在过去&#xff0c;您可能认为培训手册是一本厚重的册子&#xff0c;充满了密…

如何理解电商云仓出租?

为了说清这个概念&#xff0c;我们先说一下云的概念。别看云现在已经漫天飞舞&#xff0c;但真正能准确的把它说明白的并不多&#xff0c;多数人只是跟着一起用而已。云起源于云计算&#xff0c;是指通过云计算技术各种终端设备手机、电脑、电视、车载屏幕等实现互通互联&#…

【教学类-19-03】20221127《ABBABB式-规律排序-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 背景需求&#xff1a; 中班幼儿需要掌握ABBABB的排序规律 前文制作了ABCABC单元格色块&#xff0c;完全套用ABC排序word表格&#xff0c;调整python的代码&#xff0c;随机生成ABB排序样式&#xff0c;引导幼…

1_SpringMVC_概述,2_SpringMVC_项目搭建

M model 模型层 DAO封装 >>> Mybatis V view 视图层 html css js jsp C controller 控制层 Servlet封装 >>> springMVC SpringMVC是spring为展现层提供的基于MVC设计理念的优秀WEB框架,是目前最主流的MVC框架之一 …

疫情下如何保持高效项目交付

作者&#xff1a;饶炯 疫情以来&#xff0c;我们工作和生活的正常秩序不时受到影响&#xff0c;项目开发过程中不时出现项目成员被封闭或开发现场封锁的情况&#xff0c;很多项目不得不临时选择远程开发模式&#xff0c;项目沟通和协作中出现了各种新的问题和困难&#xff0c;严…

[附源码]计算机毕业设计springboot4S店汽车售后服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python库的使用

文章目录库的使用标准库认识标准库import导入模块使用示例&#xff1a;日期差计算使用示例&#xff1a;字符串操作1&#xff09;翻转单词顺序2&#xff09;旋转字符串3&#xff09;统计是给定字符串前缀的字符串数目第三方库认识第三方库包管理器pip使用示例&#xff1a;生成二…

QFile(文件)

QFile QFile提供一个用于读/写的接口&#xff0c;是一个可以用来读/写二进制文件的Qt资源的I/O设备&#xff0c;QFile可以单独使用&#xff0c;一般配合QTextStream或QDataStream 输入文件路径时最好使用"/"作为分隔符 构造函数&#xff1a; 常用的函数&#xff1a;…