蓝桥杯算法模板

news2024/11/26 2:34:48

模拟散列表

拉链法

import java.io.*;
import java.util.*;
public class a1 {
    static int n;
    static int N=100003;
    static int[] h=new int[N];
    static int[] e=new int[N];
    static int[] ne=new int[N];
static int idx;
static void insert(int x){
    int k=(x%N+N)%N;
    e[idx]=x;
    ne[idx]=h[k];
    h[k]=idx++;
}
static boolean find(int x){
    int k=(x%N+N)%N;
    for(int i=h[k];i!=-1;i=ne[i]){
        if(e[i]==x)return true;
    }
    return false;
}

    public static void main(String[] args) {
        Scanner sc=new Scanner(new BufferedInputStream(System.in));
        int n= sc.nextInt();
        Arrays.fill(h,-1);
    while(n-->0){
       String op= sc.next();
        int x=sc.nextInt();
    if(op.equals("I"))insert(x);
      else {
          if(find(x)) System.out.println("Yes");
          else System.out.println("No");


    }


        }


    }
}

开放寻址法

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.io.*;
import java.math.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.io.*;
import java.math.*;
public class a2 {
static int N=200000+3;
static int nu=0x3f3f3f3f;
  static int h[]=new int[N];
  static int n;
 static int find(int x){
      int t=(x%N+N)%N;
      while(h[t]!=nu&&h[t]!=x){
          t++;
          if(t==N)t=0;
      }
      return t;
  }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
      Arrays.fill(h,nu);
      int  n=sc.nextInt();
      while (n-->0){
          String op= sc.next();
          int x= sc.nextInt();
          if(op.equals("I"))h[find(x)]=x;
          else {
              if(h[find(x)]==nu) System.out.println("No");
else System.out.println("Yes");

          }
      }

    }


}

广度优先搜索

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

class BFS {
    static int N = 110, row, col;
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static char[][] a = new char[N][N];
    static int[][] dir = new int[][]{{-1, 0}, {0, 1}, {1, 0}, {0, -1}};

    public static void main(String[] args) throws Exception {
        int m = Integer.valueOf(br.readLine());
        while (m-- > 0) {
            int n = Integer.valueOf(br.readLine());
            row = col = n;
            for (int i = 0; i < n; i++) {
                String s = br.readLine();
                for (int j = 0; j < n; j++) {
                    a[i][j] = s.charAt(j);
                }
            }
            String[] ss = br.readLine().split(" ");
            int x1 = Integer.valueOf(ss[0]);
            int y1 = Integer.valueOf(ss[1]);
            int x2 = Integer.valueOf(ss[2]);
            int y2 = Integer.valueOf(ss[3]);
            if (bfs(x1, y1, x2, y2)) System.out.println("YES");
            else System.out.println("NO");
        }
    }

    public static boolean bfs(int x1, int y1, int x2, int y2) {
        Queue<int[]> q = new LinkedList<>();
        if (a[x1][y1] == '#' || a[x2][y2] == '#') return false;
        if (x1 == x2 && y1 == y2) return true;
        q.offer(new int[]{x1, y1});
        boolean[][] st = new boolean[row][col];
        st[x1][y1] = true;
        while (!q.isEmpty()) {
            int[] poll = q.poll();
            for (int i = 0; i < 4; i++) {
                int nx = dir[i][0] + poll[0];
                int ny = dir[i][1] + poll[1];
                if (nx < 0 || nx >= row || ny < 0 || ny >= col) continue;
                if (st[nx][ny] || a[nx][ny] == '#') continue;
                st[nx][ny] = true;
                if (nx == x2 && ny == y2) return true;
                q.offer(new int[]{nx, ny});
            }

        }
        return false;
    }

}

深度优先搜索

import java.io.*;
import java.util.*;
class DFS{
    static int N=110,row,col;
    static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    static char[][] a=new char[N][N];
    static int[][] dir=new int[][]{{-1,0},{0,1},{1,0},{0,-1}};

    public static void main(String[] args)throws Exception {
       int m=Integer.valueOf(br.readLine());
      while(m-->0){
          int n=Integer.valueOf(br.readLine());
          row=col=n;
          for(int i=0;i<n;i++){
              String s=br.readLine();
              for(int j=0;j<n;j++){
                  a[i][j]=s.charAt(j);
              }
          }
         String[] ss=br.readLine().split(" ");
        int x1=Integer.valueOf(ss[0]);
        int y1=Integer.valueOf(ss[1]);
        int x2=Integer.valueOf(ss[2]);
        int y2=Integer.valueOf(ss[3]);
        boolean[][] st=new boolean[n][n];
        if(a[x1][y1]=='#'||a[x2][y2]=='#') System.out.println("NO");
        else if (x1==x2&&y1==y2) {
            System.out.println("YES");
        }else if(dfs(x1,y1,x2,y2,st)){
            System.out.println("YES");
        }else System.out.println("NO");


      }

    }
public static boolean dfs(int x1,int y1,int x2,int y2,boolean[][] st){
        for(int i=0;i<4;i++){
            int nx=x1+dir[i][0];
            int ny=y1+dir[i][1];
            if(nx<0||nx>=row||ny<0||ny>=col)continue;
            if(st[nx][ny]||a[nx][ny]=='#')continue;
            st[nx][ny]=true;
            if(nx==x2&&ny==y2)return true;
            if(dfs(nx,ny,x2,y2,st))return true;
        }



        return false;
}



}

并查集

import java.util.Arrays;
import java.util.Scanner;
public class bcj {
    static int inf=0x3f3f3f3f;
    static int maxn=10051005;
    static int m,n,k,ans;
    static int[] p=new int[maxn];
    static Scanner sc=new Scanner(System.in);
static boolean[] vis=new boolean[maxn];
    public static void init(){
        Arrays.fill(vis,false);
        for (int i = 1; i <= n * m; i++) {
            p[i]=i;
        }
    }
  public static int find(int x){
        if(x!=p[x]){
            return p[x]=find(p[x]);
        }return x;
    }
    public static void join(int x, int y){
        int xx=find(x);
        int yy=find(y);
        if(xx!=yy)p[yy]=xx;
    }



    public static void main(String[] args) {

m= sc.nextInt();
n= sc.nextInt();
k= sc.nextInt();
init();

while (k-->0){
    int x,y;
    x= sc.nextInt();
    y= sc.nextInt();
    join(x,y);
}
for(int i=1;i<=m*n;i++){
    vis[find(i)]=true;

}
        for (int i = 1; i <= n * m; i++) {
            if(vis[i])ans++;
        }

        System.out.println(ans);


    }



}

扫雷

小明最近迷上了一款名为《扫雷》的游戏。

其中有一个关卡的任务如下:

在一个二维平面上放置着 nn 个炸雷,第 ii 个炸雷 (xi,yi,ri)(xi,yi,ri) 表示在坐标 (xi,yi)(xi,yi) 处存在一个炸雷,它的爆炸范围是以半径为 riri 的一个圆。

为了顺利通过这片土地,需要玩家进行排雷。

玩家可以发射 mm 个排雷火箭,小明已经规划好了每个排雷火箭的发射方向,第 jj 个排雷火箭 (xj,yj,rj)(xj,yj,rj) 表示这个排雷火箭将会在 (xj,yj)(xj,yj) 处爆炸,它的爆炸范围是以半径为 rjrj 的一个圆,在其爆炸范围内的炸雷会被引爆。

同时,当炸雷被引爆时,在其爆炸范围内的炸雷也会被引爆。

现在小明想知道他这次共引爆了几颗炸雷?

你可以把炸雷和排雷火箭都视为平面上的一个点。

一个点处可以存在多个炸雷和排雷火箭。

当炸雷位于爆炸范围的边界上时也会被引爆。

输入格式

输入的第一行包含两个整数 nmn、m。

接下来的 nn 行,每行三个整数 xi,yi,rixi,yi,ri,表示一个炸雷的信息。

再接下来的 mm 行,每行三个整数 xj,yj,rjxj,yj,rj,表示一个排雷火箭的信息。

输出格式

输出一个整数表示答案。

数据范围

对于 40%40% 的评测用例:0≤x,y≤109,0≤n,m≤103,1≤r≤100≤x,y≤109,0≤n,m≤103,1≤r≤10,

对于 100%100% 的评测用例:0≤x,y≤109,0≤n,m≤5×104,1≤r≤100≤x,y≤109,0≤n,m≤5×104,1≤r≤10。

输入样例:

2 1
2 2 4
4 4 2
0 0 5

输出样例:

2

样例解释

示例图如下,排雷火箭 11 覆盖了炸雷 11,所以炸雷 11 被排除;炸雷 11 又覆盖了炸雷 22,所以炸雷 22 也被排除。

难度:中等

时/空限制:1s / 256MB

总通过数:984

总尝试数:4743

来源:第十三届蓝桥杯省赛C++B组

算法标签

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

class Main {
    static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static final int N = 50010, M = 99997;
    static Circle[] cirs = new Circle[N];
    static long[] h = new long[M];
    static int[] id = new int[M];
    static boolean[] st = new boolean[M];
    static int n, m;
    static class Circle {
        public int x;
        public int y;
        public int r;

        public Circle(int x, int y, int r) {
            this.x = x;
            this.y = y;
            this.r = r;
        }
    }
    public static void dfs(int x, int y, int r) {
        st[find(x, y)] = true;
        for (int i = x - r; i <= x + r; i++) {
            for (int j = y - r; j <= y + r; j++) {
                if (sqr(i - x) + sqr(j - y) <= sqr(r)) {
                    int t = find(i, j);
                    if (id[t] != 0 && !st[t]) {
                        dfs(i, j, cirs[id[t]].r);
                    }
                }
            }
        }
    }

    public static long getkey(int x, int y) {
        return (long) x * 10000001 + y;
    }

    public static int find(int x, int y) {
        long key = getkey(x, y);
        int t = (int) ((key % M + M) % M);
        while (h[t] != -1 && h[t] != key) {
            if (++t == M) t = 0;
        }
        return t;
    }

    public static long sqr(int n) {
        return  n * n;
    }

    public static void main(String[] args) throws Exception {
        String[] ss = br.readLine().split(" ");
        n = Integer.parseInt(ss[0]);
        m = Integer.parseInt(ss[1]);
        Arrays.fill(h, -1);
        for (int i = 1; i <= n; i++) {
            ss = br.readLine().split(" ");
            int x = Integer.parseInt(ss[0]);
            int y = Integer.parseInt(ss[1]);
            int r = Integer.parseInt(ss[2]);
            cirs[i] = new Circle(x, y, r);
            int t = find(x, y);
            if (h[t] == -1) h[t] = getkey(x, y);
            if (id[t] == 0 || cirs[id[t]].r < r) {
                id[t] = i;
            }
        }
        while (m-- != 0) {
            ss = br.readLine().split(" ");
            int x = Integer.parseInt(ss[0]);
            int y = Integer.parseInt(ss[1]);
            int r = Integer.parseInt(ss[2]);
            for (int i = x - r; i <= x + r; i++) {
                for (int j = y - r; j <= y + r; j++) {
                    if (sqr(i - x) + sqr(j - y) <= sqr(r)) {
                        int t = find(i, j);
                        if (id[t] != 0 && !st[t]) {
                            dfs(i, j, cirs[id[t]].r);
                        }

                    }
                }
            }
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            if (st[find(cirs[i].x, cirs[i].y)]) ans++;
        }
        System.out.println(ans);
    }


}

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

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

相关文章

终端软件架构说

目录 零&#xff1a;前言 一&#xff0c;基于服务的架构 二&#xff0c;基于多进程多线程的架构 三&#xff0c;以数据为中心的架构 四&#xff0c;类Android的分层架构设计 五&#xff0c;总结 零&#xff1a;前言 谈到架构&#xff0c;可能大家的第一感觉是信息系统的…

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

Vue 3第三章:模板语法及指令介绍

文章目录1. 插值表达式1.1. 声明变量可直接在模板中使用&#xff0c;采用{{变量名称}}的方式1.2. 模板语法支持三元表达式1.3. 模板语法支持运算1.4. 模板语法支持方法调用2. 指令2.1. v-bind&#xff1a;用于绑定属性或动态绑定对象的值到元素上。2.2. v-if、v-else-if、v-els…

C#学习记录——接口的实现

一小部分知识精英依旧直面核心困难&#xff0c;努力地进行深度钻研&#xff0c;生产内容&#xff1b;而大多数信息受众始终在享受轻度学习&#xff0c;消费内容。如果我们真的希望在时代潮流中占据一席之地&#xff0c;那就应该尽早抛弃轻松学习的幻想&#xff0c;锤炼深度学习…

Burp Suite 常用模块简介

Burp Suite 常用模块分为 目标站点(target)模块 代理(proxy)模块 攻击(Intruder)模块 重放(Repeater) 模块 Target模块是对站点资源的收集&#xff0c;与站点各资源包发出和相应包的记录 Proxy模块是核心模块&#xff0c;可以拦截数据包发送往浏览器&#xff0c;进行修改后再…

网络协议分析(2)判断两个ip数据包是不是同一个数据包分片

一个节点收到两个IP包的首部如下&#xff1a;&#xff08;1&#xff09;45 00 05 dc 18 56 20 00 40 01 bb 12 c0 a8 00 01 c0 a8 00 67&#xff08;2&#xff09;45 00 00 15 18 56 00 b9 49 01 e0 20 c0 a8 00 01 c0 a8 00 67分析并判断这两个IP包是不是同一个数据报的分片&a…

Android JetPack之启动优化StartUp初始化组件的详解和使用

一、背景 先看一下Android系统架构图 在Android设备中&#xff0c;设备先通电&#xff08;PowerManager&#xff09;&#xff0c;然后加载内核层&#xff0c;内核走完&#xff0c;开始检查硬件&#xff0c;以及为硬件提供的公开接口&#xff0c;然后进入到库的加载。库挂载后开…

Winform控件开发(16)——Timer(史上最全)

前言: Timer控件的作用是按用户定义的时间间隔引发事件的计时器,说的直白点就是,他就像一个定时炸弹一样到了一定时间就爆炸一次,区别在于定时炸弹炸完了就不会再次爆炸了,但是Timer这个计时器到了下一个固定时间还会触发一次,上面那张图片就是一个典型的计时器,该定时器…

【Java】Spring Boot 配置文件

文章目录SpringBoot 配置文件1. 配置文件的作用2. 配置文件的格式3. properties配置文件说明3.1 properties基本语法3.2 读取配置文件3.3 properties缺点分析4. yml配置文件说明4.1 yml基本语法4.2 yml使用进阶4.2.1 yml配置不同的数据类型及null4.2.1 yml配置的读取4.2.2 配置…

Python蓝桥杯训练:基本数据结构 [哈希表]

Python蓝桥杯训练&#xff1a;基本数据结构 [哈希表] 文章目录Python蓝桥杯训练&#xff1a;基本数据结构 [哈希表]一、哈希表理论基础知识1、开放寻址法2、链式法二、有关哈希表的一些常见操作三、力扣上面一些有关哈希表的题目练习1、[有效的字母异位词](https://leetcode.cn…

0101基础概念-图-数据结构和算法(Java)

文章目录1 图1.1 定义1.2 4种图模型2 无向图2.1 定义2.2 术语后记1 图 1.1 定义 图是一种非线性的数据结构&#xff0c;表示多对多的关系。 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G(V, E)&#xf…

ecology9-谷歌浏览器下-pdf.js在渲染时部分发票丢失文字 问题定位及解决

问题 问题描述 &#xff1a; 在谷歌浏览器下&#xff0c;pdf.js在渲染时部分发票丢失文字&#xff1b;360浏览器兼容模式不存在此问题 排查思路&#xff1a;1、对比谷歌浏览器的css样式和360浏览器兼容模式下的样式&#xff0c;没有发现关键差别 2、✔使用Fiddler修改网页js D…

什么是线程死锁?如何解决死锁问题

死锁&#xff0c;一组互相竞争的资源的线程之间相互等待&#xff0c;导致永久阻塞的现象。 如下图所示&#xff1a; 与死锁对应的&#xff0c;还有活锁&#xff0c;是指线程没有出现阻塞&#xff0c;但是无限循环。 有一个经典的银行转账例子如下&#xff1a; 我们有个账户类…

操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 注&#xff1a;阅读本编文章前&#xff0c;请先阅读系列文章&#xff0c;以免造成看不懂的情况&#xff01;&#xff01; 基于白名单AutoElevate绕过…

2-MATLAB APP Design-下拉菜单栏的使用

一、APP 界面设计展示 1.新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、下拉菜单栏、坐标区,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:下拉菜单栏的使用,调整背景颜色,字体的颜色为黑色,字体的大小调为26. 2.在左侧组件库常用栏…

Qt音视频开发17-vlc内核回调拿图片进行绘制

一、前言 在众多播放器中&#xff0c;支持的种类格式众多&#xff0c;并支持DVD影音光盘&#xff0c;VCD影音光盘及各类流式协议&#xff0c;提供了sdk进行开发&#xff0c;这点是至关重要的&#xff0c;尽管很多优秀的播放器很牛逼&#xff0c;由于没有提供sdk第三方开发&…

【网络编程套接字(一)】

网络编程套接字&#xff08;一&#xff09;理解源IP地址和目的IP地址理解源MAC地址和目的MAC地址理解源端口号和目的端口号PORT VS PID认识TCP协议和UDP协议网络字节序socket编程接口socket常见APIsockaddr结构简单的UDP网络程序服务端创建套接字服务端绑定字符串IP VS 整数IP客…

面试官: 你知道 JWT、JWE、JWS 、JWK嘛?

想起了 之前做过的 很多 登录授权 的项目 它相比原先的session、cookie来说&#xff0c;更快更安全&#xff0c;跨域也不再是问题&#xff0c;更关键的是更加优雅 &#xff0c;所以今天总结了一篇文章来介绍他 JWT 指JSON Web Token&#xff0c;如果在项目中通过 jjwt 来支持 J…

Springboot整合 Thymeleaf增删改查一篇就够了

很早之前写过Thymeleaf的文章&#xff0c;所以重新温习一下&#xff0c;非前后端分离&#xff0c;仅仅只是学习 官网&#xff1a; https://www.thymeleaf.org/ SpringBoot可以快速生成Spring应用&#xff0c;简化配置&#xff0c;自动装配&#xff0c;开箱即用。 JavaConfigur…

【java基础】枚举类(enum)

文章目录基本介绍快速使用字段、方法、构造器枚举类方法toString方法valueOf方法values方法ordinal方法基本介绍 在java中有一种特殊的类型就是枚举类&#xff0c;对于一个有限的有固定值的集合&#xff0c;我们就可以考虑使用枚举类来进行表示&#xff0c;例如服装的大小为 小…