제출 #991301

#제출 시각아이디문제언어결과실행 시간메모리
991301rsinventorGrowing Vegetables is Fun 4 (JOI21_ho_t1)C++17
0 / 100
1 ms348 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector <ll> vll;
typedef vector<bool> vb;
typedef vector <string> vs;
typedef vector<char> vc;
typedef pair<int, int> pii;
typedef vector <pii> vpii;

#define all(a) (a).begin(), (a).end()
#define pb push_back
#define endl "\n"

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }
    vector<int> up(n);
    vector<int> down(n);
    for(int i = 1; i < n; i++) {
        if(a[i]>a[i-1] + up[i-1]) {
            up[i] = 0;
            continue;
        }
        up[i] = a[i-1] + up[i-1] + 1 - a[i];
    }
    for(int i = n-2; i >= 0; i--) {
        if(a[i]>a[i+1]+down[i+1]) {
            down[i] = 0;
            continue;
        }
        down[i] = a[i+1] + down[i+1] + 1 - a[i];
    }

    vector<int> p_up(n+1);
    vector<int> p_down(n+1);
    for(int i = 0; i <= n; i++) {
        p_up[i+1] = up[i] + p_up[i];
        p_down[i+1] = down[i] + p_down[i];
    }
    int min_i = 0;
    int min = p_down[n-1]-p_down[1];
    for(int i = 1; i < n; i++) {
        int sum = p_up[i+1] + p_down[n-1] - p_down[i+1];
//        if(i+1<n && a[i]==a[i+1]) {
//            continue;
//        }
        if(sum<min) {
            min = sum;
            min_i = i;
        }
    }

    vector<int> to_add;
    for(int i = 0; i < n; i++) {
        if(i<=min_i) {
            to_add.pb(up[i]);
        } else {
            to_add.pb(down[i]);
        }
    }

    vector<int> curr;
    int res = 0;
    for(int i = 0; i < n; i++) {
        if(to_add[i]==0) {
            if(curr.size()==0) {
                continue;
            }
            sort(all(curr));
            res += curr[curr.size()-1];
            curr.clear();
        } else {
            curr.pb(to_add[i]);
        }
    }
    for(int i = 1; i < a.size(); i++) {
        if(a[i]==a[i-1]) {
            res++;
        }
    }
    cout << res << endl;
    return 0;
}

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

Main.cpp: In function 'int main()':
Main.cpp:87:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |     for(int i = 1; i < a.size(); i++) {
      |                    ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...