题目描述
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; } }