CSES - Aalto Competitive Programming 2024 - wk3 - Wed - Results
Submission details
Task:Box stack I
Sender:aalto2024c_008
Submission time:2024-09-18 17:47:01 +0300
Language:C++ (C++20)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.00 sdetails
#18ACCEPTED0.00 sdetails
#19ACCEPTED0.00 sdetails
#20ACCEPTED0.00 sdetails
#21ACCEPTED0.00 sdetails
#22ACCEPTED0.00 sdetails
#23ACCEPTED0.00 sdetails
#24ACCEPTED0.00 sdetails
#25ACCEPTED0.00 sdetails
#26ACCEPTED0.00 sdetails
#27ACCEPTED0.00 sdetails
#28ACCEPTED0.00 sdetails
#29ACCEPTED0.00 sdetails
#30ACCEPTED0.00 sdetails
#31--details
#32--details
#33--details
#34--details
#35--details
#36--details
#37--details
#38ACCEPTED0.09 sdetails
#39--details
#40--details
#41--details
#42--details
#43--details
#44--details
#45--details
#46--details
#47--details
#48--details
#49--details
#50--details
#51--details
#52--details
#53--details
#54--details
#55--details
#56--details
#57--details
#58--details
#59--details
#60--details

Compiler report

input/code.cpp: In function 'void check(int, int)':
input/code.cpp:102:9: warning: unused variable 'lo' [-Wunused-variable]
  102 |     int lo=0, hi=n;
      |         ^~
input/code.cpp:102:15: warning: unused variable 'hi' [-Wunused-variable]
  102 |     int lo=0, hi=n;
      |               ^~

Code

#ifdef ONPC
    #define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>

#define char unsigned char
#define rep(i, a, b) for(int i=a; i< (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back

#define LSOne(S) ((S) & -(S))

using namespace std;
// mt19937 rnd(239);
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());

typedef long long C;
typedef complex<C> P;
#define X real()
#define Y imag()

template<class T>
istream& operator>> (istream& is, complex<T>& p) {
    T value;
    is >> value;
    p.real(value);
    is >> value;
    p.imag(value);
    return is;
}

typedef long long ll;
typedef long double ld;

using pi = pair<ll, ll>;
using vi = vector<ll>;
template <class T>
using pq = priority_queue<T>;
template <class T>
using pqg = priority_queue<T, vector<T>, greater<T>>;

int popcnt(int x) { return __builtin_popcount(x); }
int popcnt(ll x) { return __builtin_popcountll(x); }

#define MIN(v) *min_element(all(v))
#define MAX(v) *max_element(all(v))
#define LB(c, x) distance((c).begin(), lower_bound(all(c), (x)))
#define UB(c, x) distance((c).begin(), upper_bound(all(c), (x)))

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ", "; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? ", " : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifdef DEBUG
#define dbg(x...) cerr << "\e[91m"<<__func__<<":"<<__LINE__<<" [" << #x << "] = ["; _print(x); cerr << "\e[39m" << endl;
#else
#define dbg(x...)
#endif

template<typename S, typename T = S> void chmin(S &s, T t) {s = s < t ? s : t;}
template<typename S, typename T = S> void chmax(S &s, T t) {s = s > t ? s : t;}

const int INF = 1e9; // 10^9 = 1B is < 2^31-1
const ll LLINF = 4e18; // 4*10^18 is < 2^63-1
const double EPS = 1e-9;
const ll MOD = 1e9+7;

const int N=2020;
vector<array<int, 3>> arr;
//arr[N];
//int w[N], c[N], h[N];
multiset<array<int, 3>> v;
bool used[N];

int res=0, n;

void check(int wSum, int currH) {
    chmax(res, currH);
    int lo=0, hi=n;
    //std::cout << "max C can take: " << wSum;
    //std::cout << wSum << "<=";
    
    array<int, 3> tmp={wSum, -INF, -INF};
    int left=lower_bound(arr.begin(), arr.end(), tmp)-arr.begin();
    for (int i = left; i < n; i++) {
        if(used[i]) continue;
        used[i]=true;
        check(wSum+arr[i][1], currH+arr[i][2]);
        used[i]=false;
    }
    //__print(*it); std::cout  << std::endl;

    /*
    return;
    while(lo<hi) {
        int mid=(lo+hi+1)/2;
        if(arr[mid][1]<wSum) {
            lo=mid;
        } else {
            hi=mid-1;
        }
    }
    __print(arr[lo+1]);
    std::cout << lo << " " << n << std::endl;
    */
    return ;
}

// make {c_i, w_i, h_i}
int solve() {
    std::cin >> n;
    arr.resize(n);
    for (int i = 0; i < n; i++) {
        std::cin >> arr[i][1] >> arr[i][0] >> arr[i][2];
        //std::cin >> w[i] >> c[i] >> h[i];
        //v.insert({c[i], w[i], h[i]});
    }

    //check(0, 0);

    sort(arr.begin(), arr.end(), [&](auto &a, auto &b) {
        if(a[0]==b[0]) {
            return a[1]<b[1];
        }
        return a[0]<b[0];
    });
    
    if(false) {
    for (int i = 0; i < n; i++) {
        std::cout << arr[i][1] << " " << arr[i][0] << " " << arr[i][2] << std::endl;
    }
    std::cout  << std::endl;
    }
    //__print(arr);
    //return 0;



    //std::set<int> used;
    //for (int i = 0; i < n; i++) unused.insert(i);
    
    for (int i = 0; i < n; i++) {
        used[i]=true;
        //used.insert(i);
        check(arr[i][1], arr[i][2]);
        used[i]=false;
        //used.erase(i);
        //v.erase(v.find({c[i], w[i], h[i]}));
        //check(w[i], h[i]);
        //v.insert({c[i], w[i], h[i]});
    }


    std::cout << res << std::endl;

    return 0;
}

int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int TET = 1;
    //cin >> TET;
    for (int i = 1; i <= TET; i++) {
        #ifdef ONPC
            cout << "TEST CASE#" << i << endl;
        #endif
        
        if (solve()) {
            break;
        }

        #ifdef ONPC
            cout << "__________________________" << endl;
        #endif
    }
    #ifdef ONPC
        cerr << endl << "finished in " << clock() * 1.0 / CLOCKS_PER_SEC << " sec" << endl;
    #endif
}

Test details

Test 1

Verdict: ACCEPTED

input
1
6 7 10

correct output
10

user output
10

Test 2

Verdict: ACCEPTED

input
2
5 2 4
1 2 10

correct output
14

user output
14

Test 3

Verdict: ACCEPTED

input
2
8 2 3
3 8 5

correct output
8

user output
8

Test 4

Verdict: ACCEPTED

input
3
7 3 6
10 8 9
3 6 2

correct output
15

user output
15

Test 5

Verdict: ACCEPTED

input
3
9 6 9
4 4 6
7 2 7

correct output
15

user output
15

Test 6

Verdict: ACCEPTED

input
3
10 7 6
3 2 8
2 1 9

correct output
23

user output
23

Test 7

Verdict: ACCEPTED

input
4
8 4 2
3 4 10
5 10 5
2 6 2

correct output
17

user output
17

Test 8

Verdict: ACCEPTED

input
4
3 6 5
1 1 10
10 9 5
4 8 6

correct output
26

user output
26

Test 9

Verdict: ACCEPTED

input
4
7 3 6
10 5 9
6 10 1
6 7 1

correct output
10

user output
10

Test 10

Verdict: ACCEPTED

input
4
8 1 6
2 7 7
9 6 2
5 2 10

correct output
17

user output
17

Test 11

Verdict: ACCEPTED

input
5
6 6 8
9 7 9
6 9 5
7 7 4
...

correct output
18

user output
18

Test 12

Verdict: ACCEPTED

input
5
5 10 8
10 1 2
4 10 2
3 1 4
...

correct output
18

user output
18

Test 13

Verdict: ACCEPTED

input
5
5 2 1
10 6 10
5 5 5
4 4 2
...

correct output
17

user output
17

Test 14

Verdict: ACCEPTED

input
5
6 1 8
9 3 2
6 6 9
5 9 1
...

correct output
17

user output
17

Test 15

Verdict: ACCEPTED

input
5
10 10 6
2 10 9
8 7 7
6 3 2
...

correct output
22

user output
22

Test 16

Verdict: ACCEPTED

input
5
3 1 9
9 3 4
10 10 5
1 7 4
...

correct output
19

user output
19

Test 17

Verdict: ACCEPTED

input
5
9 10 4
3 9 1
1 4 2
10 6 1
...

correct output
12

user output
12

Test 18

Verdict: ACCEPTED

input
5
1 3 8
4 5 10
8 5 10
4 6 3
...

correct output
28

user output
28

Test 19

Verdict: ACCEPTED

input
5
9 1 10
3 9 4
6 9 3
5 1 7
...

correct output
16

user output
16

Test 20

Verdict: ACCEPTED

input
5
1 4 6
5 5 1
2 4 2
1 3 9
...

correct output
18

user output
18

Test 21

Verdict: ACCEPTED

input
10
6 6 8
9 7 9
6 9 5
7 7 4
...

correct output
22

user output
22

Test 22

Verdict: ACCEPTED

input
10
5 10 8
10 1 2
4 10 2
3 1 4
...

correct output
29

user output
29

Test 23

Verdict: ACCEPTED

input
10
5 2 1
10 6 10
5 5 5
4 4 2
...

correct output
25

user output
25

Test 24

Verdict: ACCEPTED

input
10
6 1 8
9 3 2
6 6 9
5 9 1
...

correct output
19

user output
19

Test 25

Verdict: ACCEPTED

input
10
10 10 6
2 10 9
8 7 7
6 3 2
...

correct output
31

user output
31

Test 26

Verdict: ACCEPTED

input
10
3 1 9
9 3 4
10 10 5
1 7 4
...

correct output
28

user output
28

Test 27

Verdict: ACCEPTED

input
10
9 10 4
3 9 1
1 4 2
10 6 1
...

correct output
21

user output
21

Test 28

Verdict: ACCEPTED

input
10
1 3 8
4 5 10
8 5 10
4 6 3
...

correct output
28

user output
28

Test 29

Verdict: ACCEPTED

input
10
9 1 10
3 9 4
6 9 3
5 1 7
...

correct output
27

user output
27

Test 30

Verdict: ACCEPTED

input
10
1 4 6
5 5 1
2 4 2
1 3 9
...

correct output
29

user output
29

Test 31

Verdict:

input
100
1098 1186 1431
1689 1206 1716
1090 1695 848
1248 1292 769
...

correct output
16023

user output
(empty)

Test 32

Verdict:

input
100
835 1995 1441
1866 1 257
605 1999 294
473 185 794
...

correct output
16049

user output
(empty)

Test 33

Verdict:

input
100
872 371 52
1864 1100 1896
871 970 841
642 661 309
...

correct output
14165

user output
(empty)

Test 34

Verdict:

input
100
1102 142 1417
1680 582 243
1022 1139 1786
875 1793 38
...

correct output
12391

user output
(empty)

Test 35

Verdict:

input
100
1935 1802 1095
346 1946 1712
1430 1219 1396
1196 433 283
...

correct output
19385

user output
(empty)

Test 36

Verdict:

input
100
444 111 1742
1663 414 728
1838 1959 977
180 1224 794
...

correct output
15364

user output
(empty)

Test 37

Verdict:

input
100
1786 1895 664
419 1643 129
84 741 216
1971 1191 199
...

correct output
15648

user output
(empty)

Test 38

Verdict: ACCEPTED

input
100
153 455 1560
638 877 1957
1447 912 1956
617 1077 528
...

correct output
12527

user output
12527

Test 39

Verdict:

input
100
1747 23 1938
479 1739 756
1062 1633 466
845 23 1225
...

correct output
12817

user output
(empty)

Test 40

Verdict:

input
100
21 729 1004
999 992 16
268 633 285
27 438 1755
...

correct output
15927

user output
(empty)

Test 41

Verdict:

input
200
1098 1186 1431
1689 1206 1716
1090 1695 848
1248 1292 769
...

correct output
20991

user output
(empty)

Test 42

Verdict:

input
200
835 1995 1441
1866 1 257
605 1999 294
473 185 794
...

correct output
24785

user output
(empty)

Test 43

Verdict:

input
200
872 371 52
1864 1100 1896
871 970 841
642 661 309
...

correct output
20005

user output
(empty)

Test 44

Verdict:

input
200
1102 142 1417
1680 582 243
1022 1139 1786
875 1793 38
...

correct output
21655

user output
(empty)

Test 45

Verdict:

input
200
1935 1802 1095
346 1946 1712
1430 1219 1396
1196 433 283
...

correct output
24716

user output
(empty)

Test 46

Verdict:

input
200
444 111 1742
1663 414 728
1838 1959 977
180 1224 794
...

correct output
20753

user output
(empty)

Test 47

Verdict:

input
200
1786 1895 664
419 1643 129
84 741 216
1971 1191 199
...

correct output
25462

user output
(empty)

Test 48

Verdict:

input
200
153 455 1560
638 877 1957
1447 912 1956
617 1077 528
...

correct output
19588

user output
(empty)

Test 49

Verdict:

input
200
1747 23 1938
479 1739 756
1062 1633 466
845 23 1225
...

correct output
19995

user output
(empty)

Test 50

Verdict:

input
200
21 729 1004
999 992 16
268 633 285
27 438 1755
...

correct output
26434

user output
(empty)

Test 51

Verdict:

input
1000
1098 1186 1431
1689 1206 1716
1090 1695 848
1248 1292 769
...

correct output
51198

user output
(empty)

Test 52

Verdict:

input
1000
835 1995 1441
1866 1 257
605 1999 294
473 185 794
...

correct output
49723

user output
(empty)

Test 53

Verdict:

input
1000
872 371 52
1864 1100 1896
871 970 841
642 661 309
...

correct output
47760

user output
(empty)

Test 54

Verdict:

input
1000
1102 142 1417
1680 582 243
1022 1139 1786
875 1793 38
...

correct output
46095

user output
(empty)

Test 55

Verdict:

input
1000
1935 1802 1095
346 1946 1712
1430 1219 1396
1196 433 283
...

correct output
55178

user output
(empty)

Test 56

Verdict:

input
2000
444 111 1742
1663 414 728
1838 1959 977
180 1224 794
...

correct output
76003

user output
(empty)

Test 57

Verdict:

input
2000
1786 1895 664
419 1643 129
84 741 216
1971 1191 199
...

correct output
69375

user output
(empty)

Test 58

Verdict:

input
2000
153 455 1560
638 877 1957
1447 912 1956
617 1077 528
...

correct output
68402

user output
(empty)

Test 59

Verdict:

input
2000
1747 23 1938
479 1739 756
1062 1633 466
845 23 1225
...

correct output
76262

user output
(empty)

Test 60

Verdict:

input
2000
21 729 1004
999 992 16
268 633 285
27 438 1755
...

correct output
81251

user output
(empty)