제출 #889610

#제출 시각아이디문제언어결과실행 시간메모리
889610dimashhhLasers (NOI19_lasers)C++17
100 / 100
162 ms52916 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 1,MOD = 1e9 + 7;
typedef long long ll;
#define int long long
int n,m;
ll ans =0;
bool ok = true;
vector<int> g[N];
void solve(){
    vector<pair<int,int>> _;
    for(int i = 1;i <= m;i++){
        int cur = 1,sum = 0;
        for(auto j:g[i]){
            sum += j;
        }
        if(sum == n){
            cout << n;
            return;
        }
        vector<pair<int,int>> v,all;
        for(auto j:g[i]){
            if(n - sum >= cur){
                v.push_back({cur,n - sum});
            }
            cur += j;
            sum -= j;
        }
        if(n - sum >= cur){
            v.push_back({cur,n - sum});
        }
        int k = v.size();
        for(int f = 0;f < k;f++){
            int mx = v[f].second;
            for(int j = f + 1;j <= k;j++){
                if(j == k || v[j].first > mx){
                    all.push_back({v[f].first,mx});
                    f = j - 1;
                    break;
                }else{
                    mx = max(mx,v[j].second);
                }
            }
        }
        sort(all.begin(),all.end());
        if(all.empty()) continue;
        if(all[0].first != 1){
            _.push_back({1,all[0].first - 1});
        }
        if(all.back().second != n){
            _.push_back({all.back().second + 1,n});
        }
        for(int j = 1;j < all.size();j++){
            int l = all[j - 1].second + 1,r = all[j].first - 1;
            if(l <= r){
                _.push_back({l,r});
            }
        }
    }
    vector<pair<int,int>> v = _;
    sort(v.begin(),v.end());
    int k = v.size();
    for(int i = 0;i < k;i++){
        int mx = v[i].second;
        for(int j = i + 1;j <= k;j++){
            if(j == k || v[j].first > mx){
                ans += (mx - v[i].first + 1);
                i = j - 1;
                break;
            }else{
                mx = max(mx,v[j].second);
            }
        }
    }
    cout << ans << '\n';
}
void test(){
    cin >> n >> m;
    for(int i = 1;i <= m;i++){
        int k;
        cin >> k;
        if(k > 1){
            ok = false;
        }
        while(k--){
            int s;
            cin >> s;
            g[i].push_back(s);

        }
    }
    solve();
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    while(t--){
        test();
    }
}

컴파일 시 표준 에러 (stderr) 메시지

lasers.cpp: In function 'void solve()':
lasers.cpp:55:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |         for(int j = 1;j < all.size();j++){
      |                       ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...