A
在二维坐标轴上有一个正方形,给你一个正方形的四个顶点坐标,求面积
知道一个边长,平方即可
for(int i=0;i<4;i++)x[i]=x1;
Arrays.sort(x);
//1122
k=Math.abs(x[2]-x[1]);
System.out.println(k*k);
B
操作1、2是添加和修改,操作3是移动,所以能执行操作3就执行操作3
所以只要存在一对01和10,就可以执行一次操作3,其他执行操作1、2
0 0 0 0 1
1 1 1 1 0
01的次数为4,10的次数为1,所以最少次数是1+(4 - 1),最后还是4,就是求max(x,y)
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int k = in.nextInt();while(k -- > 0) {int n = in.nextInt();int x = 0, y = 0;String s1 = in.next();String s2 = in.next();for(int i = 0; i < n; i ++) {if(s1.charAt(i) == '0' && s2.charAt(i) == '1')x ++;else if(s1.charAt(i) == '1' && s2.charAt(i) == '0')y ++;}System.out.println(Math.max(x, y));}}
}
C
两时刻的间隔数 乘以 单位耗电量 与 开关机耗电量比较,取较小的那一个是最优解
发送最后一条消息时,电量 f<=0 就无法发送
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int k = in.nextInt();while(k -- > 0) {long n =in.nextLong();long f =in.nextLong();long a =in.nextLong();long b =in.nextLong();for(int i = 1, st = 0, t; i <= n; i++) {t = in.nextInt();
// if(a * (t - st) > b)
// f -= b;
// else
// f -= a * (t - st);f -= Math.min(1L * a * (t - st), 1L * b);st = t;}System.out.println(f <= 0 ? "no" : "yes");}}
}
D
如果 st 与 r 差值大,因为 st 从小的开始,没有比他更小的了,所以直接加上 st 与 r 的差值
否则就是 st 与 l 的差值大,但不能加上这个差值,因为 a 数组是升序的,如果 st 后面还有值的话,那么差值肯定是更大的,所以要加上 ed 与 l 的差值
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int k = in.nextInt();while(k -- > 0) {int n = in.nextInt();int m = in.nextInt();Integer[] a = new Integer[n];Integer[] b = new Integer[m];for (int i = 0; i < n; i++)a[i] = in.nextInt();for (int i = 0; i < m; i++)b[i] = in.nextInt();Arrays.sort(a);Arrays.sort(b);int l = 0, r = m -1;int st = 0, ed = n - 1;long ans = 0;while(st <= ed) {if(Math.abs(a[st] - b[l]) > Math.abs(a[st] - b[r])) {ans += Math.abs(a[ed] - b[l]);l ++;ed --;} else {ans += Math.abs(a[st] - b[r]);r --;st ++;}}System.out.println(ans);}}
}
E
1、如果B在A上方,平局
row = y2 - y1 - 1,是A、B的间隔行数
t = row / 2 + 1,是A、B需要几个回合在同一行上
2、如果row为偶数,假设A赢
列数<=1,A必赢
B在A左边,A到第一列的距离 与 t 比较,<= t 说明A可以把B堵在第一列上,A赢
A在B右边同理
3、如果row为奇数,假设B赢,同理
列数必须相同,如果列数=1,A先走B后走,二维数组足够大的情况下,永远相差一列
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int T = sc.nextInt();while (T-- > 0) {int h = sc.nextInt();int w = sc.nextInt();int x1 = sc.nextInt();int y1 = sc.nextInt();int x2 = sc.nextInt();int y2 = sc.nextInt();//B和A在同一行或者在A的上方if(x1 >= x2)System.out.println("Draw");else {//A、B间隔的行数int row = x2 - x1 - 1;int t = row / 2 + 1;if(row % 2 == 0) {//一共走几回合可以在同一行上,A比B多走一次if(Math.abs(y1 - y2) <= 1 || y1 > y2 && (y1 - 1) <= t || y1 < y2 && (w - y1) <= t) {System.out.println("Alice");} else {System.out.println("Draw");}} else {if(y1 == y2 || y1 > y2 && (w - y2) <= t || y1 < y2 && (y2 - 1) <= t) {System.out.println("Bob");} else {System.out.println("Draw");}}}}}
}