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

这篇具有很好参考价值的文章主要介绍了【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

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

C、数列求值 - 模拟取余

D、数的分解 - 三重暴力

E、迷宫 - bfs 判断路径

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

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

H、人物相关性分析 - 


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

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

思路:

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

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

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

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

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

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、数列求值 - 模拟取余

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

思路:

最后算出来结果非常大,我们只需要每次取最后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、数的分解 - 三重暴力

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

思路:

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 判断路径

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,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、特别数的和 - 弱智模拟

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

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;
    }

}

 文章来源地址https://www.toymoban.com/news/detail-743189.html

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

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

思路:

(碎碎念可以不看)这题折磨死我了,看一眼数据范围就知道双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、人物相关性分析 - 

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新,蓝桥杯真题,蓝桥杯,java,算法,bfs,学习方法,职场和发展

思路:

 

到了这里,关于【蓝桥杯 第十届省赛Java B组】真题训练(A - H)H待更新的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯嵌入式第十届初赛题目解析

     最近写完了嵌入式第十届初赛的题目,拿出来和大家分享,希望帮助解决一些问题。 目录 客观题  程序设计题 题目解析 CubeMX配置  代码演示  收集的一些历年的比赛客观题和解析,以及程序设计题的PDF,在这里分享给大家。  链接 :https://pan.baidu.com/s/1hTw0inSbLjX57hOtankgKw 

    2023年04月11日
    浏览(50)
  • 蓝桥杯试题 历届真题 砝码称重【第十二届】【java省赛】

              使用java中的 Set 子接口 ,其特点是元素无序,并且不可重复。         在遍历set集合的同时修改元素会抛出java.util.ConcurrentModificationException并发修改异常  

    2024年02月07日
    浏览(55)
  • “第十届金融工程及量化投资者年会”来啦!

    第十届金融工程及量化投资者年会带着满满的干货来啦!由天软科技主办,中信证券协办的“第十届金融工程及量化投资年会”将于2023年4月20日在深圳麒麟山庄举办! 自2009年的“第一届金融工程及量化投资年会”成功举办以来,每年天软公司都会在大会上投下金融界的重磅

    2024年02月09日
    浏览(58)
  • WAVE SUMMIT迎来第十届,文心一言将有最新披露!

    10句话2分钟,挑战成功说服宿管阿姨开门,这个人群中的“显眼包”是一个接入文心大模型4.0游戏里的NPC,妥妥 “工具人”实锤~ 尝试用AI一键自动识别好坏咖啡豆,看一眼便知好坏,真正“颜值即正义”,让咖啡星人狂喜~ 借助AI在任何平面上模拟的钢琴,即兴“弹奏”世

    2024年02月04日
    浏览(52)
  • 第十届山东省大学生网络安全技能大赛【神秘的base】【小试牛刀】

    这个题,上午一直零解,后来放出了hint,提示了base64换表。 这时候,再次观察一下,发现下方一行就是新的码表,但是需要爆破6位,上方就是换表后flag的编码。 用flag头观察一下,发现变形凯撒

    2024年02月06日
    浏览(47)
  • 【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题,真题分析与代码讲解

    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届省赛程序真题 🪔本系列专栏 -  

    2023年04月15日
    浏览(92)
  • 【蓝桥杯Web】第十三届蓝桥杯(Web 应用开发)省赛真题

    第十三届蓝桥杯全国软件和信息技术专业人才大赛(软件类)新开了Web应用开发比赛,本文介绍第十三届蓝桥杯Web应用开发的省赛题目以及解析。 题目描述:使用Flex属性快速完成布局。 题目分析:主要涉及的是Flex弹性布局的知识,主要包括主轴方向和是否换行。 题目代码:

    2023年04月10日
    浏览(51)
  • "科来杯"第十届山东省大学生网络安全技能大赛决赛复现WP

    🆑 从朋友那里得来的附件,感觉题目有意思,简单复现一下 1、题目信息 2、解题方法 考察二进制和八进制转换 首先写个脚本把数据转化为字符串便于使用 然后进行转化 exp: 得到 Cyber解即可 1、题目信息 2、解题方法 Base64换表爆破 exp: 直接控制台运行   1、题目信息 一张

    2024年02月08日
    浏览(56)
  • 【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解

     🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届省

    2023年04月15日
    浏览(104)
  • 第十四届蓝桥杯C/C++_大学B组省赛真题

    【考生须知】 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。 考试时间为 4 小时。考试期间选手可浏览自己已经提交的答案,被浏览的答案允许拷贝。时间截止后,将无法继续提交或浏览答案。 对同一题目,选手可多次提交答案,以最后一次提

    2023年04月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包