当前位置: 首页 > news >正文

蓝桥杯(3.10)

1219. 移动距离

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int w = sc.nextInt();
		int m = sc.nextInt();
		int n = sc.nextInt();
		m--;
		n--;//由从1开始变为从0开始
		//求行号
		int x1 = m/w, x2 = n/w;
		//求列号
		int y1 = m%w, y2 = n%w;
		if(x1%2 != 0) y1 = w-y1-1;
		if(x2%2 != 0) y2 = w-y2-1;
		System.out.println(Math.abs(x1-x2)+Math.abs(y1-y2));//曼哈顿距离
	}
}

1229. 日期问题

import java.util.Scanner;

public class Main{
    static int[] days = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
    
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String[] s = sc.nextLine().split("/");
		for(int i=19600101;i<=20591231;i++) {
			int year = i/10000;
			int year2 = year%100;
			int month = i/100 %100;
			int day = i%100;
			int s1 = Integer.parseInt(s[0]);
			int s2 = Integer.parseInt(s[1]);
			int s3 = Integer.parseInt(s[2]);
			
			if((year%100!=0 && year%4 == 0)||(year%400 == 0))
			    days[2] = 29;
			else
			    days[2] = 28;//注意
			    
			boolean f1 = false;
			boolean f2 = false;
			boolean f3 = false;
			//日月相等或者月日相等
			if(s1 == s2 && s2 == s3){//12/12/12
			    f1 = true;
			}else if(s1 == s2){12/12/06
			    f1 = true;
			    f2 = true;
			}else if(s1 == s3){//12/06/12
			    f1 = true;
			    f3 = true;
			}else{//06/07/12
			    f1 = true;
			    f2 = true;
			    f3 = true;
			}//没有s2 == s3 这种的样例
			
			//年月日
			if(f1){
    			if(year2 == s1&&month == s2&&day == s3) {
    			    if((month>=1 && month<=12) && (day>=1 && day<=days[month]))
            				System.out.printf("%d-%02d-%02d\n",year,month,day);
    			}
			}
			//日月年
	        if(f2){
    			if(day == s1&&month == s2&&year2 == s3) {
    			    if((month>=1 && month<=12) && (day>=1 && day<=days[month]))
            			System.out.printf("%d-%02d-%02d\n",year,month,day);
			    }			
	        }
			//月日年
			if(f3){
    			if(month == s1&&day == s2&&year2 == s3) {
    			    if((month>=1 && month<=12) && (day>=1 && day<=days[month]))
        				System.out.printf("%d-%02d-%02d\n",year,month,day);
    			}			
			}
		}
	}
}

if合并

import java.util.Scanner;

public class Main{
    static int[] days = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
    
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String[] s = sc.nextLine().split("/");
		for(int i=19600101;i<=20591231;i++) {
			int year = i/10000;
			int year2 = year%100;
			int month = i/100 %100;
			int day = i%100;
			int s1 = Integer.parseInt(s[0]);
			int s2 = Integer.parseInt(s[1]);
			int s3 = Integer.parseInt(s[2]);
			
			if((year%100!=0 && year%4 == 0)||(year%400 == 0))
			    days[2] = 29;
			else
			    days[2] = 28;//注意
			    
			if(year2 == s1&&month == s2&&day == s3
			||day == s1&&month == s2&&year2 == s3
			||month == s1&&day == s2&&year2 == s3) {
			    if((month>=1 && month<=12) && (day>=1 && day<=days[month]))
        				System.out.printf("%d-%02d-%02d\n",year,month,day);
			}
		}
	}
}

1101. 献给阿尔吉侬的花束

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main{
	static int r;
	static int c;
	static final int N = 210;
	static char[][] g = new char[N][N];
	static int[][] dis = new int[N][N];
	static int[] dx = {1,-1,0,0};
	static int[] dy = {0,0,1,-1};
	
	public static int bfs(PII start,PII end) {
		Deque<PII> dq = new LinkedList<>();
		for(int i=0;i<r;i++)
			for(int j=0;j<c;j++)
				dis[i][j] = -1;
		dis[start.x][start.y] = 0;
		dq.addLast(start);
		
		while(!dq.isEmpty()) {
			PII t = dq.pollFirst();//取出队头元素并且删除
			for(int i=0;i<4;i++) {
				int x = t.x+dx[i],y = t.y+dy[i];
				if(x<0 || x>(r-1) || y<0 || y>(c-1)) continue;
				if(g[x][y] == '#')	continue;
				if(dis[x][y] != -1)	continue;
				dis[x][y] = dis[t.x][t.y] + 1;
				if(end.x == x && end.y == y)
					return dis[x][y];
				dq.addLast(new PII(x,y));
			}
		}
		return -1;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		sc.nextLine();
		while(t-- != 0) {
			r = sc.nextInt();
			c = sc.nextInt();
			sc.nextLine();
			
			for(int i=0;i<r;i++)
				g[i] = sc.nextLine().toCharArray();
			
			PII start = null,end = null;
			
			for(int i=0;i<r;i++) {
				for(int j=0;j<c;j++) {
					if(g[i][j] == 'S')
						start = new PII(i,j);
					if(g[i][j] == 'E')
						end = new PII(i,j);
				}
			}
			
			int distance = bfs(start,end);
			if(distance == -1)	System.out.println("oop!");
			else System.out.println(distance);
		}
	}
}

class PII{
	int x;
	int y;
	public PII(int x,int y) {
		this.x = x;
		this.y = y;
	}
}
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main{
	static int r;
	static int c;
	static final int N = 210;
	static char[][] g = new char[N][N];
	static int[][] dis = new int[N][N];
	static int[] dx = {1,-1,0,0};
	static int[] dy = {0,0,1,-1};
	
	public static int bfs(int[] start,int[] end) {
		Deque<int[]> dq = new LinkedList<>();
		for(int i=0;i<r;i++)
			for(int j=0;j<c;j++)
				dis[i][j] = -1;
		dis[start[0]][start[1]] = 0;
		dq.addLast(start);
		
		while(!dq.isEmpty()) {
			int[] t = dq.pollFirst();//取出队头元素并且删除
			for(int i=0;i<4;i++) {
				int x = t[0]+dx[i],y = t[1]+dy[i];
				if(x<0 || x>(r-1) || y<0 || y>(c-1)) continue;
				if(g[x][y] == '#')	continue;
				if(dis[x][y] != -1)	continue;
				dis[x][y] = dis[t[0]][t[1]] + 1;
				if(end[0] == x && end[1] == y)
					return dis[x][y];
				dq.addLast(new int[]{x,y});
			}
		}
		return -1;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		sc.nextLine();//
		
		while(t-- != 0) {
			r = sc.nextInt();
			c = sc.nextInt();
			sc.nextLine();//
			
			for(int i=0;i<r;i++)
				g[i] = sc.nextLine().toCharArray();
			
			int[] start = new int[2];
			int[] end = new int[2];
			
			for(int i=0;i<r;i++) {
				for(int j=0;j<c;j++) {
					if(g[i][j] == 'S')
						start = new int[]{i,j};
					if(g[i][j] == 'E')
						end = new int[]{i,j};
				}
			}
			
			int distance = bfs(start,end);
			if(distance == -1)	System.out.println("oop!");
			else System.out.println(distance);
		}
	}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Deque;
import java.util.LinkedList;

public class Main{
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
	static final int N = 210;
	static int r;
	static int c;
	static int[][] dis = new int[N][N];
	static char[][] ch = new char[N][N];
	
	public static int bfs(int[] start,int[] end) {
		Deque<int[]> dq = new LinkedList<>();
		for(int i=0;i<r;i++)
			for(int j=0;j<c;j++)
				dis[i][j] = -1;
		dis[start[0]][start[1]] = 0;
		dq.addLast(start);
		int[] dx = {1,-1,0,0};
		int[] dy = {0,0,1,-1};
		while(!dq.isEmpty()) {
			int[] t = dq.pollFirst();
			for(int i=0;i<4;i++) {
			    int x = t[0] + dx[i];
			    int y = t[1] + dy[i];
			    
			    if(x<0 || x>r-1 || y<0 || y > c-1)
			        continue;
			    if(ch[x][y] == '#')
			        continue;
			    if(dis[x][y] != -1)
			        continue;
			     dis[x][y] = dis[t[0]][t[1]]+1;
			     if(end[0] == x && end[1] == y)
			        return dis[x][y];
			     dq.addLast(new int[]{x,y});
			}
		}
		return -1;
	}
	public static void main(String[] args) throws IOException{
		int n = Integer.parseInt(br.readLine());//测试数据组数
		while(n-- != 0) {
			String[] s = br.readLine().split(" ");
			r = Integer.parseInt(s[0]);
			c = Integer.parseInt(s[1]);
			
			for(int i=0;i<r;i++)
				ch[i] = br.readLine().toCharArray();
			int[] start = new int[2];
			int[] end = new int[2];
			
			for(int i=0;i<r;i++)
				for(int j=0;j<c;j++) {
					if(ch[i][j] == 'S')
						start = new int[] {i,j};
					if(ch[i][j] == 'E')
						end = new int[] {i,j};							
				}
			int distance = bfs(start,end);
			if(distance == -1)	
				System.out.println("oop!");
			else
				System.out.println(distance);
		}
	}
}

1224. 交换瓶子

import java.util.*;
public class Main{
    static final int N = 10010;
    static int[] a = new int[N];
    static boolean[] b = new boolean[N];
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=1;i<=n;i++)
            a[i] = sc.nextInt();
        int sum = 0;
        for(int i=1;i<=n;i++){
            if(!b[i]){
                sum++;
                for(int j=i;!b[j];j = a[j])
                    b[j] = true;
            }
        }
        System.out.println(n - sum);
    }
}

1240. 完全二叉树的权值

import java.util.Scanner;
public class Main{
	static final int N = 100010;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] res = new int[N];
		for(int i=1;i<=n;i++)
			res[i] = sc.nextInt();
		
		long max = Long.MIN_VALUE;
		int dp = 0;
		
		for(int i=1,d=1;i<=n;d++,i*=2) {
			//i表示每一层的第一个位置
			//d表示层数
			long sum = 0;//
			for(int j=i;j<(i+(1<<d-1)) && j<=n;j++)//完全二叉树最后一层可能不满所以要j<=n
				sum+=res[j];
			if(sum>max) {
				max = sum;
				dp = d;
			}
		}
		System.out.println(dp);
	}
}

1096. 地牢大师

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

public class Main{
	static int l;
	static int r;
	static int c;
	static final int N = 110;
	static char[][][] ch = new char[N][N][N];
	static int[][][] dis = new int[N][N][N];
	static int[] dx = {1,-1,0,0,0,0};
	static int[] dy = {0,0,1,-1,0,0};
	static int[] dz = {0,0,0,0,1,-1};

	public static int bfs(int[] start,int[] end) {
		Deque<int[]> dq = new LinkedList<>();
		for(int i=0;i<l;i++)
			for(int j=0;j<r;j++)
				for(int k=0;k<c;k++) {
					dis[i][j][k] = -1;
				}
		dis[start[0]][start[1]][start[2]] = 0;
		dq.addLast(start);
		while(!dq.isEmpty()) {
			int[] t = dq.pollFirst();
			for(int i=0;i<6;i++) {
				int x = t[0]+dx[i];
				int y = t[1]+dy[i];
				int z = t[2]+dz[i];
				if(x<0 || x>l-1 || y<0 || y>r-1 || z<0 || z>c-1)
					continue;
				if(ch[x][y][z] == '#')
					continue;
				if(dis[x][y][z] != -1)
					continue;
				dis[x][y][z] = dis[t[0]][t[1]][t[2]] + 1;
				if(end[0] == x && end[1] == y && end[2] == z)
					return dis[x][y][z];
				dq.addLast(new int[] {x,y,z});
			}
		}
		return -1;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			l = sc.nextInt();
			r = sc.nextInt();
			c = sc.nextInt();
			if(l == 0 && r == 0 && c == 0)
				return ;
			int[] start = new int[3];
			int[] end = new int[3];

		 for(int i = 0;i < l;i ++)
            {
                for(int j = 0;j < r;j ++)
                {
                    char[] charArray = sc.next().toCharArray();
                    for(int k = 0;k < c;k ++)
                    {
                        ch[i][j][k] = charArray[k];
                        if(ch[i][j][k] == 'S') start = new int[] {i,j,k};
                        if(ch[i][j][k] == 'E') end = new int[] {i,j,k};
                    }
                }
            }

		

			int distance = bfs(start,end);
			if(distance == -1)
				System.out.println("Trapped!");
			else
				System.out.printf("Escaped in %d minute(s).\n",distance);
		}
	}
}

相关文章:

  • python基础及网络爬虫
  • Langchain-Chatchat本地搭建ChatGLM3模型和提取PDF内容
  • 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
  • 蓝桥杯[OJ 2928]分糖果-CPP(贪心、字典序)
  • FreeRTOS教程2 任务管理
  • 加密 / MD5算法 /盐值
  • C语言——简易版扫雷
  • 解决达梦集成 JPA 时表和字段注释注解不生效的问题
  • 2.4_4 死锁的检测和解除
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)
  • FPGA TestBench编写学习
  • 使用Vite构建Vue3+TypeScript项目
  • 深入了解网络流量清洗--使用免费的雷池社区版进行防护
  • 升级ChatGPT4.0失败的解决方案
  • 【亲测有效】解决三月八号ChatGPT 发消息无响应!
  • 【语法基础练习】1.变量、输入输出、表达式与顺序语句
  • MinGW-w64的下载与安装
  • 设计模式—桥接模式
  • SQL中如何添加数据
  • 安装zabbix
  • 尊严的代价:新加坡福利体系下的价值困境
  • 季子文化与江南文化的根脉探寻与融合
  • 60余年产业积累,“江苏绿心”金湖炼就“超级石油工具箱”
  • 世贸组织欢迎中美经贸高层会谈取得积极成果
  • “海豚音”依旧,玛丽亚·凯莉本周来沪开唱
  • “犍陀罗艺术与亚洲文明”在浙大对外展出