蓝桥杯(3.10)
- 开源代码
- 2025-07-23 10:36:01

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