【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新

news2024/11/29 8:37:57

目录

A、组队 - 看图一眼出答案

B、不同子串 - 字符串模拟 + set去重

C、数列求值 - 模拟取余

D、数的分解 - 三重暴力

E、迷宫 - bfs 判断路径

F、特别数的和 - 弱智模拟

G、外卖店优先级 - map 暴力(90%通过率)

H、人物相关性分析 - 


A、组队 - 看图一眼出答案

思路:

 没啥说的,注意不能重复选择同一编号!

98+99+98+97+98=98*5=490

B、不同子串 - 字符串模拟 + set去重

import java.util.*;

public class test {
	
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		String s="0100110001010001";
		int n=s.length();
		Set<String> st=new HashSet<>();
		
		for(int i=0;i<n;i++)
			for(int j=i+1;j<n+1;j++)
			{
				String t=s.substring(i,j);
				st.add(t);
			}
		System.out.print(st.size());
	}
}

 答案是100

C、数列求值 - 模拟取余

思路:

最后算出来结果非常大,我们只需要每次取最后4位就好

答案是4659 

public class test {
	
	static int N=20190324;
	
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		int[] d=new int[N];
		d[0]=1;
		d[1]=1;
		d[2]=1;
		for(int i=3;i<N;i++) 
			d[i]=(d[i-1]+d[i-2]+d[i-3])%10000;
			
		System.out.print(d[N-1]);
	}
}

D、数的分解 - 三重暴力

思路:

3个各不相同的正整数,我们只需要i j k三重循环,并保证i<j<k,再字符串判断是否含2或4即可,答案是40785

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int res=0,target=2019;
        for(int i=1;i<target;i++)
            for(int j=i+1;j<target;j++)
                for (int k=j+1;k<target;k++)
                {
                    if(i+j+k==target&&ck(i)&&ck(j)&&ck(k)) res++;
                }
        System.out.println(res);
    }

    public static boolean ck(int x) {
        String s=String.valueOf(x);
        if(s.indexOf('2')!=-1||s.indexOf('4')!=-1) return false;
        return true;
    }
}

E、迷宫 - bfs 判断路径

【蓝桥杯集训11】BFS(4 / 4)_Roye_ack的博客-CSDN博客 

思路:

DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDRDRRURRUURRDDDDRDRRRRRURRRDRRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDRDRRRRDRDRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR

迷宫问题用bfs解决,要求满足字典序最小的最短路,我们可以设置能走时优先选择顺序【D>L>R>U】,也就是在dx dy方向数组上按顺序定义

建立坐标系,x轴正方向向下,y轴正方向向右

首先倒着bfs预处理出d[i][j]——(i,j)到终点的最短距离

然后正向遍历能走的点,如果d[x][y]==d[nx][ny]+1,说明走这点是在最短路上,记录方向

因为我们优先是【D>L>R>U】这么走的,所以输出的最短路肯定是字典序最小的

为什么d[x][y]==d[nx][ny]+1说明是在最短路上?

因为bfs跑完,处理出的 值非-1的d[i][j] 都是能通往终点的最短路。d[i][j]代表(i,j)到终点的最短距离,如果d[x][y]==d[nx][ny]+1,说明(x,y)是最短路上(nx,ny)的前一个点,相当于说(x,y)在最短路上

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    static int n=30,m=50;
    static int[][] d=new int[n+1][m+1]; //d[i][j]是(i,j)到终点的最短距离
    static String[] g=new String[n+1]; //存储原始迷宫
    static int[] dx={1,0,0,-1};  // 方向优先D>L>R>U
    static int[] dy={0,-1,1,0};
    static char[] dir={'D','L','R','U'};

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<n;i++) g[i]=sc.next();

        bfs();
        String res="";
        int x=0,y=0;
        while(x!=n-1||y!=m-1)
        {
            for(int i=0;i<4;i++)
            {
                int nx=dx[i]+x;
                int ny=dy[i]+y;
                if(nx>=0&&nx<n&&ny>=0&&ny<m&&g[nx].charAt(ny)=='0')
                {
                    if(d[x][y]==d[nx][ny]+1)
                    {
                        res+=dir[i]; //如果这条路能走且在最短路上 记录方向
                        x=nx;
                        y=ny;
                    }
                }
            }
        }

        System.out.println("最短路径为:"+d[0][0]);
        System.out.println(res);
    }

    public static void bfs() {
        for(int i=0;i<n;i++) Arrays.fill(d[i],-1);
        d[n-1][m-1]=0;
        Queue<PII> q=new LinkedList<>();
        q.offer(new PII(n-1,m-1));

        while(!q.isEmpty())
        {
            PII t=q.poll();
            for(int i=0;i<4;i++)
            {
                int nx=t.x+dx[i];
                int ny=t.y+dy[i];
                if(nx>=0&&nx<n&&ny>=0&&ny<m&&d[nx][ny]==-1&&g[nx].charAt(ny)=='0')
                {
                    d[nx][ny]=d[t.x][t.y]+1;
                    q.offer(new PII(nx,ny));
                }
            }
        }
    }
}

class PII
{
    int x,y;
    PII(int x,int y)
    {
        this.x=x;
        this.y=y;
    }
}

F、特别数的和 - 弱智模拟

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int res=0;
        int n=sc.nextInt();
        for(int i=1;i<=n;i++)
            if(ck(i)) res+=i;

        System.out.println(res);
    }

    public static boolean ck(int x)
    {
        String s=String.valueOf(x);
        if(s.indexOf('0')!=-1||s.indexOf('1')!=-1||s.indexOf('2')!=-1||s.indexOf('9')!=-1)
            return true;
        return false;
    }

}

 

G、外卖店优先级 - map 暴力(90%通过率)

思路:

(碎碎念可以不看)这题折磨死我了,看一眼数据范围就知道双for会t,然后就想着找规律,但是找规律不行,第一次找的规律是:预处理记录每个id的时间点,2*时间点的个数=总共赚的优先级,然后再减去没有的时间点个数(因为如果没有订单优先级-1),最后判断大于3就说明在队列里

但这样写忽略了一种情况:id为2的时间点【5,6,6】如果按照上面规律,1,2,3,4属于没有出现的时间点,减去他们就是-4,然而实际上1,2,3,4时因为优先级为0,并不需要减去。

然后我就放弃思考了,写了个暴力……暴力写的完也是debug一年(因为循环时把t写成n了,为了这改了很久……)(碎碎念结束)

  • 建一个map,【id:时间点列表】
  • 然后遍历每一个id的从1—t的时间点
    • 如果出现,则【优先级+=2×时间点出现次数】,这里运用排序+下标方法计算时间点出现次数
    • 如果没有出现,则优先级-1,如果已经是0了就不变
  • 最后判断一下状态,如果优先级>5则true,如果优先级<=3则false
  • 如果状态为true,则res++
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int res=0;
        int n=sc.nextInt(),m= sc.nextInt(), t= sc.nextInt();
        Map<Integer,List<Integer>> mp=new HashMap<>();
        
        int[] shopnum=new int[n+1];
        boolean[] st=new boolean[n+1];
        int[] h=new int[n+1];
        
        while(m-->0)
        {
            int ts=sc.nextInt();
            int id=sc.nextInt();
            List<Integer> list=new ArrayList<>();
            if(shopnum[id]!=0) list=mp.get(id);  //注意只有map中有list时才能直接赋值,否则需要新建
            list.add(ts);
            mp.put(id,list);
            shopnum[id]++;
        }

        int id=1;
        for(List<Integer> x:mp.values())
        {
            Collections.sort(x); //排序是为了后面计算一个时间点出现多次的情况
            for(int i=1;i<=t;i++)
            {
                if(x.contains(i))  h[id]+=2*(x.lastIndexOf(i)-x.indexOf(i)+1); //eg:【1,1,1,3】 1的lastindex-indexof+1就是1的个数
                else if(!x.contains(i)) h[id]=Math.max(0,h[id]-1);
                if(h[id]>5) st[id]=true;
                else if(h[id]<=3) st[id]=false;
            }
            if (st[id]) res++;
            id++;
        }

        System.out.println(res);
    }
}

 

H、人物相关性分析 - 

思路:

 

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

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

相关文章

Ant Design Vue Table 表格内容高度自适应+固定表头踩坑

前言 对于非专业前端开发者来使用 Ant Design UI 组件来开发企业级后台管理系统来说是非常不错的选择&#xff0c;但这并不意味着我们能够用好这个框架&#xff0c;因为 UI 交互上和有许多细节上的问题对于非专业前端来说并不容易解决&#xff0c;最近在使用 Table 组件时就遇…

实战:基于TC3XX STM模块的时间片程序开发

1. 前言 STM模块,全称为系统定时器模块,可以看作是汽车ECU中的一个计时器。STM模块能够精确地测量和跟踪时间。 在ECU软件中,STM模块通常用于创建定期任务,比如每10毫秒执行一次的任务。这就像是一个闹钟,每隔10毫秒就会响一次,提醒ECU执行某个特定的任务。 这里的10m…

分享3个适合大学生使用的白板笔记软件,学习效率蹭蹭上涨!

现如今许多大学生不在使用纸和笔进行做笔记了&#xff0c;通通改成了各种笔记软件&#xff0c;如何选择一个好用的笔记软件&#xff0c;是当代大学生较为头疼的事&#xff0c;小编今天通过这篇文章&#xff0c;为你推荐3款宝藏级笔记软件&#xff0c;大家一定要收藏好&#xff…

18.自监督视觉`transformer`模型DINO

文章目录 自监督视觉`transformer`模型DINO总体介绍DINO中使用的SSL和KD方法multicrop strategy损失函数定义`teacher`输出的中心化与锐化模型总体结构及应用reference欢迎访问个人网络日志🌹🌹知行空间🌹🌹 自监督视觉transformer模型DINO 总体介绍 论文:1.Emerging …

变融启程 视界已破——“新主流·新未来”四川广播电视台战略分享会在成都举行

2023年11月1日下午&#xff0c;2024年度“新主流新未来”四川广播电视台战略分享会在成都举行。从三年前的“变融”开启融合、转型之路&#xff0c;到两年前以“进化”应对变化探索媒体融合之路&#xff0c;再到去年塑造“新视界”全屏聚合传播矩阵&#xff0c;四川广播电视台不…

MIT6.5830 Lab1-GoDB实验记录(四)

MIT6.5830 Lab1-GoDB实验记录&#xff08;四&#xff09; – WhiteNights Site 标签&#xff1a;Golang 读写缓冲区我是一点思路都没有&#xff0c;所以得单独开篇文章记录。 实验补充 了解buffer、序列化与反序列化 这里的序列化&#xff0c;简单来说类似于把一个很长的字符…

C/C++ sizeof

介绍 sizeof 是一个关键字、操作符&#xff0c;也是一个编译时运算符 作用&#xff1a;返回一个对象或者类型所占的内存字节数 使用方法 sizeof(type_name);//sizeof(类型) sizeof(object);//sizeof(对象) 注意&#xff1a; sizeof 操作符不能用于函数类型&#xff0c;不…

爆肝将近 10 万字讲解 Node.Js 详细教程

1. Node.Js 环境概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;用于在服务器端运行 JavaScript。它使用了一个事件驱动、非阻塞式I/O的模型&#xff0c;使得其轻量且高效。Node.js 的包管理器 npm 是全球最大的开源库生态系统。Node.js 能够响应大…

Java架构师知识产权与标准化

目录 1 导学2 知识产权概述3 保护期限4 知识产权人的确定4 侵权判断5 标准划分想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 知识产权概述 知识产权是指公民、法人、非法人单位对自己的创造性智力成果和其他科技成果依法享有的民事权。是智力成果的创造人依…

AI“走深向实”,蚂蚁蚁盾在云栖大会发布实体产业「知识交互建模引擎」

数字化起步晚、数据分散稀疏、专业壁垒高、行业知识依赖「老师傅」&#xff0c;是很多传统产业智能化发展面临的难题。2023年云栖大会上&#xff0c;蚂蚁集团安全科技品牌蚁盾发布“知识交互建模引擎”&#xff0c;将实体产业知识与AI模型有机结合&#xff0c;助力企业最快10分…

二进制基础

最近开始入坑系统安全大坑&#xff0c;调转方向开始了解pwn&#xff0c;那就要补一些那少得可怜的底层基础啦 先学几个单词&#xff1a; exploit&#xff1a;用于攻击的脚本与方案payload&#xff1a;攻击载荷&#xff0c;是目标进程被劫持控制流的数据&#xff08;精心构造的…

Python画图之HelloKitty

Python-turtle画出HelloKitty&#xff08;有趣小游戏&#xff09; 一、效果图二、安装库1.常用镜像源2.库下载 三、Python代码 一、效果图 二、安装库 1.常用镜像源 1. 豆瓣http://pypi.douban.com/simple/ 2. 清华大学&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple…

智能视频监控平台EasyCVR出现偶发通道在线,但是无法播放的情况要怎么解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储…

Scrum of Scrums大规模敏捷管理流程

​​​​​​​Leangoo领歌​​​​​​​是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c…

Linux学习之进程二

目录 进程状态 R (running)运行状态与s休眠状态&#xff1a; disk sleep&#xff08;深度睡眠状态&#xff09; T (stopped)&#xff08;暂停状态&#xff09; t----tracing stop(追踪状态) X死亡状态&#xff08;dead&#xff09; Z(zombie)-僵尸进程 孤儿进程 进程优…

Android问题

这里面要加入 ,加入前是点击待君登录直接跳回手机主界面了 加入上述代码即可 Android之Inflate() Inflate()作用就是将xml定义的一个布局找出来&#xff0c;但仅仅是找出来而且隐藏的&#xff0c;没有找到的同时并显示功能。 android上还有一个与Inflate()类似功能的…

【AI视野·今日CV 计算机视觉论文速览 第274期】Tue, 24 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Tue, 24 Oct 2023 Totally 138 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;Wonder3D, 基于交叉扩散模型的单图像三维形状生成。(from 香港大学) website:https://www.xxlong.site/Wonder3D/ Daily Co…

Flutter 04 按钮Button和事件处理、弹框Dialog、Toast

一、按钮组件 1、按钮类型&#xff1a; 2、按钮实现效果&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);overrideWidget build(BuildContext co…

X64(64位)汇编指令与机器码转换原理

X64&#xff08;64位&#xff09;汇编指令与机器码转换原理 1 64位寻址形式下的ModR/M字节1.1 寻址方式1.2 寄存器编号 2 汇编指令转机器码2.1 mov rcx, 1122334455667788h2.2 mov rcx,[r8]与mov [r8],rcx2.3 mov rcx,[r8r9*2] 本文属于《 X86指令基础系列教程》之一&#xff…

重温云栖,分享十年成长:我和云栖的故事

文章目录 前言活动背景我和云栖的交际历届峰会主题2009201020112012201320142015201620172018202120222023 技术带来的变化工作生活关注的领域 后记 前言 云栖大会&#xff0c;前身可追溯到2009年的地方网站峰会&#xff0c;2011年演变为阿里云开发者大会&#xff0c;2015年正式…