华为机试---聊天



题目描述

A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a 1  ,b 1  ],[a 2,b 2  ]..[a p  ,b p  ]。B的空闲时间是[c 1  +t,d 1  +t]..[c q  +t,d q  +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;
 }
 
}


你可能感兴趣的:(java,华为)