Practice.
A. A+B?
题意
给定一个形如
思路
模拟。
时间复杂度:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while(t -- > 0){
String[] a = scanner.next().split("\\+");
System.out.println(Integer.parseInt(a[0]) + Integer.parseInt(a[1]));
}
}
}
过于签到,应该有语言可以一行解决吧
B. Matrix Rotation
题意
给定一个
- 每一行的第一个元素小于第二个元素;
- 每一列的第一个元素小于第二个元素。
思路
模拟。
时间复杂度:
对应AC代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
nxt:
while(t -- > 0){
int a = scanner.nextInt(), b = scanner.nextInt(), c = scanner.nextInt(), d = scanner.nextInt();
for(int i=0;i<4;i++){
if(a < b && b < d && a < c && c < d){
System.out.println("YES");
continue nxt;
}
int tmp = b; b = a; a = c; c = d; d = tmp;
}
System.out.println("NO");
}
}
}
模拟就完事了
C. Different Differences
题意
给定两个整数
思路
若数组无长度和大小限制,那么我们只需输出以
考虑到限制,我们在输出第
时间复杂度:
对应AC代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while(t -- > 0){
int k = scanner.nextInt(), n = scanner.nextInt();
int a = 1;
for(int i=1;i<=k;i++){
System.out.printf("%d ", Math.min(a, i + n - k));
a += i;
}
System.out.println();
}
}
}
简单构造题
D. Absolute Sorting
题意
给定一个数组
思路
由题意,我们需要满足 $|ai - x| \leq |a{i + 1} - x|$。
我们不妨先来考虑 $ai < a{i + 1}$ 的情况:
- $x \leq ai
a_i \leq a{i + 1}$,恒成立; - $x \geq a{i + 1}
a_i \geq a{i + 1}$,不成立; - $ai < x < a{i + 1}
x - ai \leq a{i + 1} - x x \leq \lfloor \frac{ai + a{i + 1}}{2} \rfloor$。
综上所述,$x \le \lfloor \frac{ai + a{i+1}}{2} \rfloor$。
同理,当 $ai > a{i + 1}
因而,我们只需求出左端点的最大值
时间复杂度:
对应AC代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while(t -- > 0){
int n = scanner.nextInt();
int pre = scanner.nextInt();
int l = 0, r = Integer.MAX_VALUE;
for(int j = 1; j < n; j++)
{
int cur = scanner.nextInt();
if(pre > cur)
l = Math.max(l, (pre + cur + 1) / 2);
if(pre < cur)
r = Math.min(r, (pre + cur) / 2);
pre = cur;
}
System.out.println(l <= r ? l : -1);
}
}
}
简单的拆绝对值分类讨论
- 本文链接 https://floating-ocean.github.io/blog_old/posts/3095280907/
- 版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!