• 2016蘑菇街编程题:聊天


    题目描述

    解题

    解题思路:

    1. 小蘑的时间假设为[a,b],小菇的时间假设是[c+t,d+t],小菇起床的时间是t∈[l,r]
    2. 那么当"a < b < (c+t) < (d+t)"或者"(c+t) < (d+t) < a < b"的情况时,小蘑和小菇无法聊天,由题目条件已知"a < b""c < d",那么推出"(c+t) < (d+t)"
    3. 所以仅仅当"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;
        }
    }

    参考链接

  • 相关阅读:
    构建WebGL目标时的内存考量
    译作感想
    sign
    VS code搭建C环境
    003 总线
    计算机混淆概念(更新……)
    002计算机硬件性能指标
    001计算机基本组成与工作过程
    Linux虚拟机手动安装eclipse
    VMware安装vmtools实现宿主机和虚拟机共享粘贴板
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5338490.html
Copyright © 2020-2023  润新知