Submission #920714

# Submission time Handle Problem Language Result Execution time Memory
920714 2024-02-03T00:39:10 Z hasuhasuiro Zagrade (COI20_zagrade) C++17
Compilation error
0 ms 0 KB
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, K;
    unsigned X;
    cin >> N >> K >> X;
    vector l(N, (unsigned)0), r(N, (unsigned)0), t(N, (unsigned)0);
    for(int i = 0; i < N; i++) { cin >> l[i] >> t[i] >> r[i]; r[i]++; }
    /* 座標圧縮用の座標 */
    vector P(0, (unsigned)0);
    for(int i = 0; i < N; i++) { P.push_back(l[i]), P.push_back(r[i]); } /* 各区間の始点終点 */
    for(int i = 0; i < N; i++) { if(l[i]+t[i] < r[i]) { P.push_back(l[i]+t[i]); } } /* 追加料金のかかる区間の始点 */
    sort(begin(P), end(P));
    P.erase(unique(begin(P), end(P)), end(P));
    map<unsigned, int> mp2;
    for(int i = 0; i < (int)size(P); i++) { mp2[P[i]] = 1; }
    int sizep(size(P));
    for(int i = 0; i < sizep; i++) {
        P.push_back(P[i]+X), P.push_back(P[i]-X);
        if(mp2.find(P[i]+X) == end(mp2)) { mp2[P[i]+X] = 2; }
        if(mp2.find(P[i]-X) == end(mp2)) { mp2[P[i]-X] = 3; }
    } /* ある点から X の距離の点 */
    sort(begin(P), end(P));
    P.erase(unique(begin(P), end(P)), end(P));
 
    /* P の逆引きできるような連想配列 */
    map<unsigned, int> mp;
    for(int i = 0; i < (int)size(P); i++) { mp[P[i]] = i; }
    vector imos(size(P), 0);
    for(int i = 0; i < N; i++) { imos[mp[l[i]]]++; imos[mp[r[i]]]--; } /* 各区間の区間加算 */
    for(int i = 0; i+1 < (int)size(P); i++) { imos[i+1] += imos[i]; } /* 求解 */
 
    vector imos2(size(P), (unsigned)0);
    for(int i = 0; i < N; i++) { if(l[i]+t[i] < r[i]) { imos2[mp[l[i]+t[i]]]++; imos2[mp[r[i]]]--; } } /* 追加料金の区間加算 */
    for(int i = 0; i+1 < (int)size(P); i++) { imos2[i+1] += imos2[i]; } /* 求解 */
    for(int i = 0; i < (int)size(P); i++) { if(imos[i] < K) { imos2[i] = 0; } } /* 許される場合は除外する */
 
    /* 尺取り法 */
    unsigned ans(0), res(0);
    for(int i = 0, j = 0; i+1 < (int)size(P); i++) {
        if(mp2[P[i]] == 2) {
            res -= imos2[mp[P[i]]] * (unsigned)(P[i+1] - P[i]); /* 左端を加算 */    
            continue;
        }
        for(; j < (int)size(P); j++) {
            if(P[i]+X <= P[j]) { break; }
            else if(j+1 < (int)size(P)) { res += imos2[mp[P[j]]] * (unsigned))(P[j+1]-P[j]); } /* 右端を加算 */
            else break;
        }
        ans = max(res, ans);
        res -= imos2[mp[P[i]]] * (unsigned)(P[i+1] - P[i]); /* 左端を加算 */
    }
    cout << ans << endl;
    return 0;
}

Compilation message

zagrade.cpp: In function 'int main()':
zagrade.cpp:55:69: error: expected primary-expression before 'unsigned'
   55 |             else if(j+1 < (int)size(P)) { res += imos2[mp[P[j]]] * (unsigned))(P[j+1]-P[j]); } /* 右端を加算 */
      |                                                                     ^~~~~~~~
zagrade.cpp:55:69: error: expected ')' before 'unsigned'
   55 |             else if(j+1 < (int)size(P)) { res += imos2[mp[P[j]]] * (unsigned))(P[j+1]-P[j]); } /* 右端を加算 */
      |                                                                    ~^~~~~~~~
      |                                                                     )