1.教师占用
//输入样例2
//4
//3 10
//20 30
//1 3
//1 39
//输出样例2
//1
//4
//输入样例3
//3
//1 5
//2 6
//3 7
//输出样例3
//0
//样例解释
//样例1中删除 1,2 ,3社团中的任何一个都可以使得另外两个社团无冲突的使用教室
//样例2中删除4以后【1,3】【3,10】【20,30】无冲突,若删除1,2,3中任何一个都会与4冲突。
package beike;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class room {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
ArrayList<Interval> input = new ArrayList<>();
for (int i = 0; i < n; i++) {
input.add(new Interval(sc.nextInt(), sc.nextInt(), i + 1));
}
// 按照start排序
Collections.sort(input, new Comparator<Interval>() {
public int compare(Interval m1, Interval m2) {
if (m1.start == m2.start) {
return m1.end - m2.end;
} else {
return m1.start - m2.start;
}
}
});
// 是否可以删除
if (dfs(input, 0, 0)) {
if (result.size() == 0) {// 没有重叠
System.out.println(n);
for (int i = 0; i < n; i++) {
System.out.print(i + 1 + " ");
}
} else {// 有一个重叠
System.out.println(result.size());
for (Interval i : result) {
System.out.print(i.index + " ");
}
}
} else {// 不可以输出0
System.out.println(0);
}
}
}
static List<Interval> result = new ArrayList<>();
public static boolean dfs(ArrayList<Interval> list, int count, int current) {
if (current == list.size()) {
return true;
}
Interval interval = list.get(current);
int start = interval.start;
int end = interval.end;
for (int i = current + 1; i < list.size(); i++) {
interval = list.get(i);
start = interval.start;
if (end > start) {
if (count == 1) {// 两对重叠,不可以,返回false
return false;
}
list.remove(i);// 删除重复的第一个
boolean flag1 = false;
boolean flag2 = false;
if (i - 2 >= 0) {
flag1 = dfs(list, count + 1, i - 2);
} else {
flag1 = dfs(list, count + 1, 0);
}
if (flag1) {
result.add(interval);
}
// 恢复删除
if (i < list.size()) {// 判断是否结尾
list.set(i, interval);
} else {
list.add(interval);
}
flag2 = dfs(list, count + 1, i - 1);// 删除重复的第一个
if (flag2) {
result.add(list.get(i + 1));
}
return flag1 || flag2;
}
end = interval.end;
}
return true;
}
}
class Interval {
int start;
int end;
int index;
public Interval(int start, int end, int index) {
this.start = start;
this.end = end;
this.index = index;
}
}
2.修路
排序相加
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum = 0;
int min = Integer.MAX_VALUE;
int a = 0;
for (int i = 0; i < args.length; i++) {
a = sc.nextInt();
sum += a;
min = Math.min(min, a);
}
System.out.println(sum - min);
}
3.电池耗电
80%,没过 ,仅供参考
package world;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Demo9 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
if (n == 0) {
System.out.println(0);
continue;
}
int p1 = sc.nextInt();
int p2 = sc.nextInt();
int p3 = sc.nextInt();
int t1 = sc.nextInt();
int t2 = sc.nextInt();
HashMap<Integer, Integer> map = new HashMap<>();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
map.put(a[i], sc.nextInt());
}
Arrays.sort(a);
int sum = 0;
int start = map.get(a[0]);
int end = 0;
sum += (start - a[0]) * p1;
for (int i = 1; i < a.length; i++) {
sum += (map.get(a[i]) - a[i]) * p1;
end = a[i];
sum += cal(start, end, p1, p2, p3, t1, t2);
start = map.get(a[i]);
}
System.out.println(sum);
}
}
public static int cal(int a, int b, int p1, int p2, int p3, int t1, int t2) {
int sum = 0;
if (a + t2 <= b) {
sum += (b - t1 - t2 - a) * p3 + t2 * p2 + t1 * p1;
} else {
if (a + t1 <= b) {
sum += (b - t1 - a) * p2 + t1 * p1;
} else {
sum += (a - b) * p1;
}
}
return sum;
}
}