제출 #1287357

#제출 시각아이디문제언어결과실행 시간메모리
1287357QuocSenseiLasers (NOI19_lasers)C++20
100 / 100
95 ms8856 KiB
#include <bits/stdc++.h>

#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second

using namespace std;

struct Line
{
    int l, r;

    Line(int l = 0, int r = 0) :
        l(l), r(r) {};
    Line operator & (Line other)
    {
        Line ans;
        ans.l = max(l, other.l);
        ans.r = min(r, other.r);
        return ans;
    }
};

const int maxn = 5e5;

int L, R, a[maxn + 10], ans = 0, cnt = 0;
vector<ii> points;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    if (fopen("LASER.INP", "r"))
    {
        freopen("LASER.INP", "r", stdin);
        freopen("LASER.OUT", "w", stdout);
    }

    cin >> L >> R;
    for (int i = 1; i <= R; i++)
    {
        int n, pre = 0, suf = 0;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            suf += a[i];
        }
        for (int i = 1; i <= n; pre += a[i], i++)
        {
            suf -= a[i];
            int l_1 = pre + 1;
            int r_1 = l_1 + a[i] - 1;
            int r_2 = L - suf;
            int l_2 = r_2 - a[i] + 1;
            Line intersect = Line(l_1, r_1) & Line(l_2, r_2);
            if (intersect.l > intersect.r)
                continue;
            points.push_back(ii(intersect.l, 1));
            points.push_back(ii(intersect.r + 1, -1));
        }
    }
    sort(points.begin(), points.end());
//    for (ii pr : points)
//        cout << pr.fi << ' ' << pr.se, el;
    for (int i = 0; i < points.size(); )
    {
        if (cnt)
            ans += points[i].fi - points[i - 1].fi;
        int j = i;
        while (j < points.size() && points[i].fi == points[j].fi)
        {
            cnt += points[j].se;
            j++;
        }
//        cout << i << ' ' << j << ' ' << delta, el;
        i = j;
    }
    cout << ans;
}

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

lasers.cpp: In function 'int main()':
lasers.cpp:36:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |         freopen("LASER.INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
lasers.cpp:37:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |         freopen("LASER.OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...