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;elsedays[2] = 28;//注意boolean f1 = false;boolean f2 = false;boolean f3 = false;//日月相等或者月日相等if(s1 == s2 && s2 == s3){//12/12/12f1 = true;}else if(s1 == s2){12/12/06f1 = true;f2 = true;}else if(s1 == s3){//12/06/12f1 = true;f3 = true;}else{//06/07/12f1 = 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;elsedays[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!");elseSystem.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<=nsum+=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!");elseSystem.out.printf("Escaped in %d minute(s).\n",distance);}}
}