试题编号: | 201809-2 |
试题名称: | 买菜 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]...[an,bn]在装车,对于小W来说有n个不相交的时间段[c1,d1],[c2,d2]...[cn,dn]在装车。其中,一个时间段[s, t]表示的是从时刻s到时刻t这段时间,时长为t-s。 输入格式 输入的第一行包含一个正整数n,表示时间段的数量。 输出格式 输出一行,一个正整数,表示两人可以聊多长时间。 样例输入 4 样例输出 3 数据规模和约定 对于所有的评测用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,对于所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。
|
java(100分通过版):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] times = new int[1000000];
int count = 0;
for(int i = 0; i < 2*n; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
for(int j = a; j < b; j++) {
times[j]++;
}
}
for(int i : times)
if(i > 1)
count++;
System.out.println(count);
}
}
网上大致有这几种写法:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int h[][]=new int[n][2];
int w[][]=new int[n][2];
for (int i=0;i<n;i++){
h[i][0]=sc.nextInt();
h[i][1]=sc.nextInt();
}
for (int i=0;i<n;i++){
w[i][0]=sc.nextInt();
w[i][1]=sc.nextInt();
}
int sum=0;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (h[i][0]<w[j][1]&&h[i][0]>=w[j][0]){
if (h[i][1]<=w[j][1]){
sum+=(h[i][1]-h[i][0]);
break;
}else {
sum+=(w[j][1]-h[i][0]);
break;
}
}
}
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (w[i][0]<h[j][1]&&w[i][0]>h[j][0]){
if (w[i][1]<=h[j][1]){
sum+=(w[i][1]-w[i][0]);
break;
}else {
sum+=(h[j][1]-w[i][0]);
break;
}
}
}
}
System.out.println(sum);
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static Scanner sc;
static int total;
static int time;
static List<TimeGap> list1;
static List<TimeGap> list2;
static String temp;
static String[] cmd;
public static void main(String[] args) {
sc = new Scanner(System.in);
list1 = new ArrayList<>();
list2 = new ArrayList<>();
total = sc.nextInt();
for(int i=0;i<total;i++) {
list1.add(new TimeGap(sc.nextInt(), sc.nextInt()));
}
for(int i=0;i<total;i++) {
list2.add(new TimeGap(sc.nextInt(), sc.nextInt()));
}
for(int i=0;i<total;i++) {
for(int j=0;j<total;j++) {
if((list1.get(i).start>=list2.get(j).end) || (list2.get(j).start>=list1.get(i).end)) {
continue;
} else {
if((list1.get(i).start<=list2.get(j).start)&&(list1.get(i).end<=list2.get(j).end)) {
time+=list1.get(i).end-list2.get(j).start;
} else if((list2.get(j).start<=list1.get(i).start)&&(list2.get(j).end<=list1.get(i).end)) {
time+=list2.get(j).end-list1.get(i).start;
} else if((list1.get(i).start<=list2.get(j).start)&&(list1.get(i).end)>=list2.get(j).end) {
time+=list2.get(j).end-list2.get(j).start;
} else if((list2.get(j).start<=list1.get(i).start)&&(list2.get(j).end)>=list1.get(i).end) {
time+=list1.get(i).end-list1.get(i).start;
} else
continue;
}
}
}
System.out.print(time);
}
}
class TimeGap{
public int start;
public int end;
public TimeGap(int start, int end) {
this.start = start;
this.end = end;
}
}