zoukankan      html  css  js  c++  java
  • 【基础】Atcoder-ABC183-D-Water Heater【差分】

    传送门

    D - Water Heater

    题意

    有一个热水器,每秒钟提供W/升的热水。

    有N个人,第(i)个人在(S_i)-(T_i)这个时间段内要用(P_i)升热水。

    问你热水器每秒钟提供的热水是否够他们使用,如果可以的话输出Yes,否则输出No.

    思路

    考虑差分前缀和,某段时间内使用的热水量实际是n个人在这个区间内的综合,那么第(i)个人的贡献实际是对于S:

    sum[s]+=p
    

    对于T:

    sum[t]-=p
    

    其中sum数组是差分数组。

    然后从最小的时刻开始一直对sum数组求和到最大的时刻,如果在这期间总量超过了W,输出No,否则输出Yes.

    AC代码

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimization("unroll-loops")
    
    #include<bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int INF = 0x3f3f3f3f;
    const int mod = 1e9+7;
    const int maxn = 2e5+10;
                            
    ll sum[maxn];
    int main(void){
        #ifndef ONLINE_JUDGE
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
        #endif
        int n,w;   
        cin >> n >> w;
        int maxx = 0;
        for(int i = 1; i <= n; i++){
            int s,t,p;
            cin >> s >> t >> p;
            maxx = max(maxx,t);
            sum[s] += p;
            sum[t] -= p;
        }
        ll ans = 0;
        bool flag = 0;
        for(int i = 0; i < maxx; i++){
            ans += sum[i];
            if(ans>w){
                flag = 1;
                break;
            }
        }
        if(flag) cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
        return 0;
    }
    
  • 相关阅读:
    HTTP状态码汇总
    树遍历以及图遍历的方法
    HashMap之扩容机制
    MySQL常见的七种锁
    双亲委派机制及作用
    Java进程故障排查思路及步骤
    八大数据结构
    常见的十种排序算法
    使用TortoiseGit操作分支的创建与合并
    Storage Port Drivers
  • 原文地址:https://www.cnblogs.com/AC-AC/p/13984138.html
Copyright © 2011-2022 走看看