답안 #1063305

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1063305 2024-08-17T16:41:55 Z PotatoTheWarriorFRTT Bulldozer (JOI17_bulldozer) C++14
0 / 100
33 ms 472 KB
#include <bits/stdc++.h>
using namespace std;
 
long long MOD = 1000000000+7;
typedef long long ll;
typedef pair<pair<ll, ll>, pair<ll, ll>> Point;

int log2(int x) {
    int ln = -1;
    while(x > 0) {
        ln++;
        x/=2;
    }
    return ln;
}
 
bool comp(Point p1, Point p2) {
    return p1.second.second < p2.second.second;
}

ll max_sub_sum(vector<ll> &vals) {
    ll S[vals.size()+1];
    ll M[vals.size()+1];
    S[0] = 0;
    M[0] = 0;
    for(int i=1;i<=vals.size();i++) {
        S[i] = S[i-1]+vals[i-1];
        M[i] = min(M[i-1], S[i]);
    }
    ll ans = 0;
    for(int i=0;i<vals.size();i++) {
        ans = max(ans, S[i+1] - M[i+1]);
    }
    return ans;
}

void solve() {
    int n; cin >> n;
    vector<Point> points;
    for(int i=0;i<n;i++) {
        Point p;
        cin >> p.first.first >> p.first.second >> p.second.first;
        points.push_back(p);
    }
    ll ans = max(0LL, points[0].second.first);
    bool considered = false;
    for(int i=0;i<n;i++) {
        for(int j=i;j<n;j++) {
            pair<ll, ll> dir = {points[i].first.first - points[j].first.first, points[i].first.second - points[j].first.second};
            if(dir.first != 0 || dir.second != 0 || !considered) {
                if(dir.first == 0 && dir.second == 0) {
                    considered = true;
                    dir = {1, 0};
                }
                for(int k=0;k<n;k++) {
                    points[k].second.second = dir.first * points[k].first.first + dir.second * points[k].first.second;
                }
                sort(points.begin(), points.end(), comp);
                vector<ll> vals;
                for(int k=0;k<n;k++) {
                    vals.push_back(0);
                    ll X = points[k].second.second;
                    while(points[k].second.second == X) {
                        vals[vals.size()-1]+=points[k].second.first;
                        k++;
                    }
                    k--;
                }

                ans = max(ans, max_sub_sum(vals));
            }
        }
    }
    cout << ans << endl;
}
 
int main()   {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    // int t;
    // cin >> t;
    // while (t--)
        solve();
    char sdhfn;
    cin >> sdhfn;
}

Compilation message

bulldozer.cpp: In function 'll max_sub_sum(std::vector<long long int>&)':
bulldozer.cpp:26:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     for(int i=1;i<=vals.size();i++) {
      |                 ~^~~~~~~~~~~~~
bulldozer.cpp:31:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for(int i=0;i<vals.size();i++) {
      |                 ~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 348 KB Output is correct
2 Correct 14 ms 344 KB Output is correct
3 Correct 14 ms 348 KB Output is correct
4 Correct 14 ms 348 KB Output is correct
5 Correct 14 ms 464 KB Output is correct
6 Correct 14 ms 468 KB Output is correct
7 Correct 14 ms 348 KB Output is correct
8 Correct 14 ms 344 KB Output is correct
9 Correct 14 ms 348 KB Output is correct
10 Correct 14 ms 348 KB Output is correct
11 Runtime error 0 ms 348 KB Execution killed with signal 11
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 348 KB Output is correct
2 Correct 30 ms 348 KB Output is correct
3 Correct 29 ms 348 KB Output is correct
4 Correct 29 ms 472 KB Output is correct
5 Correct 29 ms 468 KB Output is correct
6 Correct 29 ms 348 KB Output is correct
7 Correct 29 ms 348 KB Output is correct
8 Incorrect 29 ms 348 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 348 KB Output is correct
2 Correct 30 ms 348 KB Output is correct
3 Correct 29 ms 348 KB Output is correct
4 Correct 29 ms 472 KB Output is correct
5 Correct 29 ms 468 KB Output is correct
6 Correct 29 ms 348 KB Output is correct
7 Correct 29 ms 348 KB Output is correct
8 Incorrect 29 ms 348 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 348 KB Output is correct
2 Correct 30 ms 348 KB Output is correct
3 Correct 29 ms 348 KB Output is correct
4 Correct 29 ms 472 KB Output is correct
5 Correct 29 ms 468 KB Output is correct
6 Correct 29 ms 348 KB Output is correct
7 Correct 29 ms 348 KB Output is correct
8 Incorrect 29 ms 348 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 348 KB Output is correct
2 Correct 14 ms 344 KB Output is correct
3 Correct 14 ms 348 KB Output is correct
4 Correct 14 ms 348 KB Output is correct
5 Correct 14 ms 464 KB Output is correct
6 Correct 14 ms 468 KB Output is correct
7 Correct 14 ms 348 KB Output is correct
8 Correct 14 ms 344 KB Output is correct
9 Correct 14 ms 348 KB Output is correct
10 Correct 14 ms 348 KB Output is correct
11 Runtime error 0 ms 348 KB Execution killed with signal 11
12 Halted 0 ms 0 KB -