Submission #418718

#TimeUsernameProblemLanguageResultExecution timeMemory
418718JediMaster11Meetings (IOI18_meetings)C++17
19 / 100
5582 ms504520 KiB
#include <bits/stdc++.h> // #include "meetings.h" using namespace std; #define fo(a, b, c) for (int a = b; a < c; a++) #define ll long long #define print(x) cout << x << "\n"; #define vint vector<int> #define vll vector<long long> vll maxx[10000]; // 750000 ll recur2(int l, int r, vint h) { if (r - l == 1) { return h[l]; } ll numOnes = 0; ll maxOnes = 0; bool onOne = false; fo(i, l, r) { if (h[i] == 1) { if (onOne) { numOnes++; } else { numOnes = 1; onOne = true; } } else if (onOne) { onOne = false; maxOnes = max(maxOnes, numOnes); numOnes = 0; } } if (onOne) { onOne = false; maxOnes = max(maxOnes, numOnes); numOnes = 0; } return maxOnes + 2 * (r - l - maxOnes); } ll recur(int l, int r, vint h) { // r is non-inclsuive if (r - l == 1) { return h[l]; } else if (r == l) { return 0; } if (maxx[l][r - 1] != -1) { return maxx[l][r - 1]; } ll maxH = -1; fo(i, l, r) { maxH = max(maxH, (ll)h[i]); } vector<pair<pair<int, int>, ll>> aves; // stores the left and right, and then the sum of the middle int leftH = l; fo(i, l, r) { if (h[i] == maxH) { if (i == l || h[i] != h[i - 1]) { ll tmp = recur(leftH, i, h); aves.push_back({{leftH, i}, tmp}); } leftH = i + 1; } } if (leftH != r) { ll tmp = recur(leftH, r, h); aves.push_back({{leftH, r}, tmp}); } // int index=-1; ll smallest = 0ll + maxH * (r - l) + 1; fo(i, 0, aves.size()) { ll maxtmp = 0ll + aves[i].second + maxH * ((r - aves[i].first.second) + (aves[i].first.first - l)); if (maxtmp < smallest) { smallest = maxtmp; } } maxx[l][r - 1] = smallest; return smallest; } // h - heights // l, r - left and right bounds of each meeting vll minCosts; vll minimum_costs(vint h, vint l, vint r) { int numMeetings = l.size(); minCosts.reserve(numMeetings); int maxH = 0; fo(i, 0, h.size()) { maxH = max(maxH, h[i]); } if (maxH <= -1) { fo(i, 0, (int)numMeetings) { minCosts.push_back(recur2(l[i], r[i] + 1, h)); } } else { fo(j, 0, h.size()) { maxx[j].assign(h.size(), -1); } fo(i, 0, (int)numMeetings) { minCosts.push_back(recur(l[i], r[i] + 1, h)); } } return minCosts; }

Compilation message (stderr)

meetings.cpp: In function 'long long int recur(int, int, std::vector<int>)':
meetings.cpp:5:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define fo(a, b, c) for (int a = b; a < c; a++)
......
  111 |     fo(i, 0, aves.size())
      |        ~~~~~~~~~~~~~~~~~               
meetings.cpp:111:5: note: in expansion of macro 'fo'
  111 |     fo(i, 0, aves.size())
      |     ^~
meetings.cpp: In function 'std::vector<long long int> minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:5:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define fo(a, b, c) for (int a = b; a < c; a++)
......
  138 |     fo(i, 0, h.size())
      |        ~~~~~~~~~~~~~~                  
meetings.cpp:138:5: note: in expansion of macro 'fo'
  138 |     fo(i, 0, h.size())
      |     ^~
meetings.cpp:5:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define fo(a, b, c) for (int a = b; a < c; a++)
......
  154 |         fo(j, 0, h.size())
      |            ~~~~~~~~~~~~~~              
meetings.cpp:154:9: note: in expansion of macro 'fo'
  154 |         fo(j, 0, h.size())
      |         ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...