题目描述
解题
解题思路:
- 小蘑的时间假设为
[a,b]
,小菇的时间假设是[c+t,d+t]
,小菇起床的时间是t∈[l,r]
- 那么当
"a < b < (c+t) < (d+t)"
或者"(c+t) < (d+t) < a < b"
的情况时,小蘑和小菇无法聊天,由题目条件已知"a < b"
和"c < d"
,那么推出"(c+t) < (d+t)"
- 所以仅仅当
"b < (c+t)"
或者"(d+t) < a"
时无法聊天,其余情况都是可以聊天的
开始理解题目是:在空闲时间都要聊天,看了上面讲解,在空闲时间段至少有一次聊天就好了
import java.util.Scanner; public class Main{int p,q,l,r;int[][] A,B;int count;public static void main(String[] args){Main m = new Main();m.run();}public void run(){Scanner in = new Scanner(System.in);while(in.hasNext()){count = 0;String[] pqlr = in.nextLine().split(" ");p = Integer.valueOf(pqlr[0]);q = Integer.valueOf(pqlr[1]);l = Integer.valueOf(pqlr[2]);r = Integer.valueOf(pqlr[3]);if(!Judgepq(p,q) && !Judgelr(l,r))continue;A = new int[p][2];B = new int[q][2];for(int i =0;i<p;i++){String[] row = in.nextLine().split(" ");A[i][0] = Integer.valueOf(row[0]);A[i][1] = Integer.valueOf(row[1]);}for(int i =0;i<q;i++){String[] row = in.nextLine().split(" ");B[i][0] = Integer.valueOf(row[0]);B[i][1] = Integer.valueOf(row[1]);}for(int t = l;t<=r;t++){if(isWake(t)){count++;}}System.out.println(count);}}public boolean isWake(int t){for(int i=0;i<A.length;i++){for(int j =0;j<B.length;j++){if(! (A[i][1] < B[j][0] + t) || ! (B[j][1] + t< A[i][0])){return true;// 在这个时间点起床 可以聊天就好,不在乎聊几次 }}}return false;}public boolean Judgepq(int p,int q){if(p>=1 && p<=50 && q>=1 && p<=50)return true;return false;}public boolean Judgelr(int l,int r){if(l>=0&& r>=0 && l<=1000 && r<=1000)return true;return false;} }
参考链接