제출 #1182016

#제출 시각아이디문제언어결과실행 시간메모리
1182016nekolieAdvertisement 2 (JOI23_ho_t2)C++20
100 / 100
101 ms12544 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n; cin >> n;
    pair<int,int> risa[n];
    vector<pair<int,int>> zabijmnie;
    for (int i = 0; i < n; i++)
        cin >> risa[i].first >> risa[i].second;
    if (n == 1)
        cout << 1 << endl;
    else {
        int dp[n][2], odp = 0;
        sort(risa,risa+n);
        for (int i = 0; i < n; i++)
            if (i == 0 || risa[i] != zabijmnie.back())
                zabijmnie.push_back(risa[i]);
        int m = zabijmnie.size();
        for (int i = 0; i < m; i++)
            risa[i] = zabijmnie[i];
        if (m == 1)
            cout << 1 << endl;
        else {
            dp[0][0] = risa[0].first+risa[0].second, dp[m-1][1] = risa[m-1].second-risa[m-1].first;
            for (int i = 1; i < m; i++)
                dp[i][0] = max(dp[i-1][0],risa[i].first+risa[i].second);
            for (int i = m-2; i >= 0; i--)
                dp[i][1] = max(dp[i+1][1],risa[i].second-risa[i].first);
            if (risa[0].second-risa[0].first > dp[1][1])
                odp++;
            if (risa[m-1].first+risa[m-1].second > dp[m-2][0])
                odp++;
            for (int i = 1; i < m-1; i++)
                if (risa[i].second-risa[i].first > dp[i+1][1] && risa[i].first+risa[i].second > dp[i-1][0])
                    odp++;
            cout << odp << endl;
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...