// Online C++ compiler to run C++ program online
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
int main() {
long long n, c;
std::cin >> n >> c;
std::vector<std::pair<long long, long long>> cubes;
std::map<long long, std::vector<long long>> cubesByStyle;
std::map<long long, long long> sums;
for (long long i = 0; i < n; i++)
{
long long t1, t2;
std::cin >> t1 >> t2;
cubes.push_back(std::make_pair(t1, t2));
if (cubesByStyle.count(t2))
{
cubesByStyle.at(t2).push_back(t1);
sums.at(t2) = sums.at(t2) + t1;
}
else
{
cubesByStyle.insert(std::make_pair(t2, std::vector<long long>{t1}));
sums.insert(std::make_pair(t2, t1));
}
}
long long maxScoreKey = std::max_element(sums.begin(), sums.end(), [](const std::pair<long long, long long>& a, const std::pair<long long, long long>& b)->bool { return a.second < b.second; })->first;
long long score = sums[maxScoreKey];
bool previousReplaced = true;
for (std::vector<std::pair<long long, long long>>::iterator i = cubes.begin(); i != cubes.end(); i++)
{
if (i->second == maxScoreKey || count(cubesByStyle[maxScoreKey].begin(), cubesByStyle[maxScoreKey].end(), i->first))
{
previousReplaced = false;
continue;
}
long long sum = i->first - (previousReplaced || i->first > cubesByStyle[maxScoreKey].back() ? 1 : 2) * c;
if (sum > 0)
{
score += sum;
previousReplaced = true;
}
}
std::cout << score;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | // Online C++ compiler to run C++ program online #include <iostream> #include <vector> #include <map> #include <algorithm> int main() { long long n, c; std::cin >> n >> c; std::vector<std::pair<long long, long long>> cubes; std::map<long long, std::vector<long long>> cubesByStyle; std::map<long long, long long> sums; for (long long i = 0; i < n; i++) { long long t1, t2; std::cin >> t1 >> t2; cubes.push_back(std::make_pair(t1, t2)); if (cubesByStyle.count(t2)) { cubesByStyle.at(t2).push_back(t1); sums.at(t2) = sums.at(t2) + t1; } else { cubesByStyle.insert(std::make_pair(t2, std::vector<long long>{t1})); sums.insert(std::make_pair(t2, t1)); } } long long maxScoreKey = std::max_element(sums.begin(), sums.end(), [](const std::pair<long long, long long>& a, const std::pair<long long, long long>& b)->bool { return a.second < b.second; })->first; long long score = sums[maxScoreKey]; bool previousReplaced = true; for (std::vector<std::pair<long long, long long>>::iterator i = cubes.begin(); i != cubes.end(); i++) { if (i->second == maxScoreKey || count(cubesByStyle[maxScoreKey].begin(), cubesByStyle[maxScoreKey].end(), i->first)) { previousReplaced = false; continue; } long long sum = i->first - (previousReplaced || i->first > cubesByStyle[maxScoreKey].back() ? 1 : 2) * c; if (sum > 0) { score += sum; previousReplaced = true; } } std::cout << score; return 0; } |
English