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