1 条题解

  • 3
    @ 2022-9-27 19:42:07

    空调凉凉

    根据题意,我们只需调节空调的温度,使温度落在食客的温度区间内即可。

    当初第一反应是维护一个温度值,根据食客的需求改变温度。但这里存在问题:对于有限的操作,最后能落在温度区间的温度是不唯一的。如果是这样,很多种可能叠加,不难发现会超时。

    也许你会觉得只要满足最低条件即可,但这种贪心是错误的,我们不能保证下一个本因可行的区间被判为不可行(如一直递增的温度区间)

    单个值失败了,那就多个值呗。 我们只要维护一个区间,让每次所有的可行解落在该区间即可。 然后,对于每一个区间,我们只需和后面的区间进行区间重叠运算即可。

    对于重叠的区间,有四种可能: 1.可行区间 cur 和后一个温度区间没有重叠 2.两区间左侧或右侧部分重叠 3.可行区间 cur 包含于后一个温度区间 4.可行区间 cur 被包含于后一个温度区间

    Java AC 代码 (怪怪的码风

    import java.util.*;
    
    public class Main {
    
        static class Person{
            long t, l, h;
            Person(long t, long l, long h){
                this.t = t;
                this.l = l;
                this.h = h;
            }
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int q = scanner.nextInt();
            g:for(int i=0;i<q;i++){
                int n = scanner.nextInt(), m = scanner.nextInt();
                Person[] p = new Person[n];
                for(int j=0;j<n;j++) p[j] = new Person(scanner.nextLong(), scanner.nextLong(), scanner.nextLong());
                long left = m - p[0].t, right = m + p[0].t; //以第一个人的到达时间划分初始区间
                for(int j=0;j<n;j++){
                    Person cur = p[j];
                    if(cur.h < left || cur.l > right){
                        System.out.println("NO");
                        continue g;
                    }else if(j == n - 1){ //如果是最后一个,只要有交集就已经成功
                        System.out.println("YES");
                        continue g;
                    }
                    if(cur.l >= left && cur.h <= right){ //包含关系
                        left = cur.l;
                        right = cur.h;
                    }else if(cur.l >= left) left = cur.l; //右侧有区间重叠
                    else if(cur.h <= right) right = cur.h; //左侧有区间重叠
                    left -= p[j + 1].t - cur.t;
                    right += p[j + 1].t - cur.t;
                }
            }
        }
    }
    

    解完辣~

    第一次写题解,可能交代的不是很清楚,见谅。

    • @ 2022-10-2 23:57:23

      前排围观大佬

  • 1

信息

ID
457
时间
1000ms
内存
256MiB
难度
7
标签
递交数
53
已通过
14
上传者