题目描述
A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a1 ,b1 ],[a2,b2 ]..[ap ,bp ]。B的空闲时间是[c1 +t,d1 +t]..[cq +t,dq +t],这里t为B的起床时间。这些时间包括了边界点。B的起床时间为[l,r]的一个时刻。若一个起床时间能使两人在任意时刻聊天,那么这个时间就是合适的,问有多少个合适的起床时间?
输入描述:
第一行数据四个整数:p,q,l,r(1≤p,q≤50,0≤l≤r≤1000)。接下来p行数据每一行有一对整数ai,bi(0≤ai<bi≤1000)表示a的时间表,接下来p行每行一对整数ci,di(0≤ci,di≤1000)表示b的时间表。保证ai+1>bi,ci+1>di
输出描述:
输出答案个数
输入例子:
2 3 0 20 15 17 23 26 1 4 7 11 15 17
输出例子:
20
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int p = scan.nextInt();
int q = scan.nextInt();
int l = scan.nextInt();
int r = scan.nextInt();
int[][] A = new int[p][2];
int[][] B = new int[q][2];
for(int i = 0 ; i < p ; i++){
A[i][0] = scan.nextInt();
A[i][1] = scan.nextInt();
}
for(int i = 0 ; i < q ; i++){
B[i][0] = scan.nextInt();
B[i][1] = scan.nextInt();
}
int count = 0;
for(int t = l ; t <= r ; t++){
if(isAppropriateTime(A , B , t)){
count++;
}
}
System.out.println(count);
}
scan.close();
}
/**
* 判断起床时间是否可以保证能使两人在任一时刻聊天
* 算法思想:查看区间是否有重合的部分,对于A的某个区间[a,b],B的某个区间[c+t,d+t]
* 如果满足c+t<=b&&d+t>=a成立说明区间有重合的部分,可以保证能够聊天
* */
public static boolean isAppropriateTime(int[][] A , int[][] B , int t){
boolean isAppropriateTime= false;
int p = A.length;
int q = B.length;
for(int i = 0 ; i < p ; i++){
if(isAppropriateTime == true) break;
for(int j = 0 ; j < q ; j++){
if(B[j][0] + t <= A[i][1] && B[j][1] + t >= A[i][0]){
isAppropriateTime = true;
break;
}
}
}
return isAppropriateTime;
}
}
77

被折叠的 条评论
为什么被折叠?



