Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 22.31 KB | None | 0 0
  1. #include<map>
  2. #include<vector>
  3. #include<bitset>
  4. #include<string>
  5. #include<iostream>
  6. #include<cstdint>
  7. #include<fstream>
  8. #include<unordered_map>
  9. #include<algorithm>
  10. #include<sstream>
  11. #include<memory>
  12. #include<chrono>
  13. #include<set>
  14. #include<iterator>
  15.  
  16.  
  17. using namespace std::chrono;
  18.  
  19.  
  20. struct Timer
  21. {
  22.     std::string name;
  23.     high_resolution_clock::time_point start_point;
  24.  
  25.     Timer(const std::string& name) : name(name)
  26.     {
  27.         start_point = high_resolution_clock::now();
  28.     }
  29.  
  30.     ~Timer()
  31.     {
  32.         high_resolution_clock::time_point finish_point = high_resolution_clock::now();
  33.         std::cout << name << " finished in " << duration_cast<milliseconds>(finish_point - start_point).count() << "ms" << std::endl;
  34.     }
  35. };
  36.  
  37.  
  38. struct Book
  39. {
  40.     uint32_t id = 0;
  41.     uint32_t score = 0;
  42.  
  43.     Book(uint32_t id, uint32_t score) : id(id), score(score)
  44.     {
  45.     }
  46. };
  47.  
  48.  
  49. struct Library
  50. {
  51.     uint32_t id = 0;
  52.     uint32_t signup_time = 0;
  53.     uint32_t books_per_day = 0;
  54.  
  55.     std::vector<uint32_t> books;
  56.  
  57.     Library(uint32_t id, uint32_t signup_time, uint32_t books_per_day): id(id), signup_time(signup_time), books_per_day(books_per_day)
  58.     {
  59.     }
  60. };
  61.  
  62.  
  63. struct Input
  64. {
  65.     uint32_t total_time = 0;
  66.     std::vector<Book> books;
  67.     std::vector<Library> libs;
  68. };
  69.  
  70.  
  71. Input read_input(const std::string& path)
  72. {
  73.     Input input;
  74.     std::ifstream input_file(path);
  75.     if (!input_file.is_open())
  76.     {
  77.         std::cout << path << " was not found!" << std::endl;
  78.     }
  79.  
  80.     int B, L, D;
  81.     input_file >> B >> L >> D;
  82.  
  83.     input.total_time = D;
  84.     input.libs.reserve(L);
  85.     input.books.reserve(B);
  86.  
  87.     uint32_t score;
  88.     for (int i = 0; i < B; ++i)
  89.     {
  90.         input_file >> score;
  91.         input.books.push_back(Book(i, score));
  92.     }
  93.  
  94.     uint32_t N, T, M, bid;
  95.     for (int i = 0; i < L; ++i)
  96.     {
  97.         input_file >> N >> T >> M;
  98.         Library lib(i, T, M);
  99.         lib.books.reserve(N);
  100.         for (int j = 0; j < N; ++j)
  101.         {
  102.             input_file >> bid;
  103.             lib.books.push_back(bid);
  104.         }
  105.         input.libs.push_back(lib);
  106.     }
  107.  
  108.     return input;
  109. }
  110.  
  111.  
  112. struct SolutionItem
  113. {
  114.     uint32_t lib_id;
  115.     std::vector<uint32_t> book_ids;
  116. };
  117.  
  118.  
  119. struct Solution
  120. {
  121.     std::vector<SolutionItem> log;
  122. };
  123.  
  124.  
  125. void save_solution(const Solution& solution, const std::string& filename)
  126. {
  127.     std::ofstream output_file(filename);
  128.     output_file << solution.log.size() << std::endl;
  129.     for (int i = 0; i < solution.log.size(); ++i)
  130.     {
  131.         const SolutionItem& item = solution.log[i];
  132.         output_file << item.lib_id << " " << item.book_ids.size() << std::endl;
  133.         for (int j = 0; j < item.book_ids.size(); ++j)
  134.         {
  135.             output_file << item.book_ids[j] << " ";
  136.         }
  137.         output_file << std::endl;
  138.     }
  139. }
  140.  
  141.  
  142. uint32_t score_solution(const Input& input, const Solution& solution)
  143. {
  144.     uint32_t total_score = 0;
  145.     for (int i = 0; i < solution.log.size(); ++i)
  146.         for (int j = 0; j < solution.log[i].book_ids.size(); ++j)
  147.             total_score += input.books[solution.log[i].book_ids[j]].score;
  148.  
  149.     return total_score;
  150. }
  151.  
  152.  
  153. Solution solve_B(const Input& input)
  154. {
  155.     Solution solution;
  156.  
  157.     std::vector<uint32_t> book_counter(input.books.size(), 0);
  158.     std::vector<uint32_t> book_scores_normalized(input.books.size(), 0);
  159.  
  160.     std::vector<Library> libs = input.libs;
  161.     for (int i = 0; i < libs.size(); ++i)
  162.     {
  163.         for (int j = 0; j < libs[i].books.size(); ++j)
  164.         {
  165.             ++book_counter[libs[i].books[j]];
  166.         }
  167.     }
  168.  
  169.     for (int i = 0; i < input.books.size(); ++i)
  170.     {
  171.         book_scores_normalized[i] = (uint32_t)round(input.books[i].score * 1.0 / book_counter[i]);
  172.     }
  173.  
  174.  
  175.     std::sort(libs.begin(), libs.end(),
  176.         [](const Library& a, const Library& b) {
  177.             return a.signup_time < b.signup_time || (a.signup_time == b.signup_time && a.books.size() > b.books.size());
  178.         }
  179.     );
  180.  
  181.     std::vector<bool> used_books(input.books.size(), false);
  182.  
  183.     uint32_t total_signup = 0;
  184.     for (int i = 0; i < libs.size(); ++i)
  185.     {
  186.         if (i > 0 && i % 100 == 0)
  187.         {
  188.             std::cout << i << "/" << libs.size() << " processed" << std::endl;
  189.         }
  190.         const Library& l = libs[i];
  191.         total_signup += l.signup_time;
  192.         std::vector<std::vector<uint32_t>> books_by_score(100005);
  193.         for (int j = 0; j < l.books.size(); ++j)
  194.         {
  195.             uint32_t book_id = l.books[j];
  196.             if (used_books[book_id])
  197.                 continue;
  198.  
  199.             const Book& b = input.books[l.books[j]];
  200.             books_by_score[b.score].push_back(b.id);
  201.             // books_by_score[book_scores_normalized[i]].push_back(b.id);
  202.         }
  203.  
  204.         std::vector<uint32_t> sorted_books;
  205.         for (uint32_t s = 1000; s > 0; --s)
  206.         {
  207.             for (int r = 0; r < books_by_score[s].size(); ++r)
  208.             {
  209.                 sorted_books.push_back(books_by_score[s][r]);
  210.             }
  211.         }
  212.         if (sorted_books.size() == 0)
  213.         {
  214.             total_signup -= l.signup_time;
  215.             continue;
  216.         }
  217.  
  218.         SolutionItem item;
  219.         item.lib_id = l.id;
  220.         if (input.total_time < total_signup)
  221.             break;
  222.        
  223.         uint32_t remaining_books = (input.total_time - total_signup) * l.books_per_day;
  224.         for (int r = 0; r < std::min(remaining_books, sorted_books.size()); ++r)
  225.         {
  226.             uint32_t book_id = sorted_books[r];
  227.             item.book_ids.push_back(book_id);
  228.             used_books[book_id] = true;
  229.         }
  230.  
  231.         if (item.book_ids.size() > 0)
  232.             solution.log.push_back(item);
  233.     }
  234.  
  235.     return solution;
  236. }
  237.  
  238.  
  239. Solution solve_D(const Input& input)
  240. {
  241.     Solution solution;
  242.  
  243.     std::vector<uint32_t> book_counter(input.books.size(), 0);
  244.     std::vector<double> book_rarity(input.books.size(), 0);
  245.     std::vector<double> lib_rarity(input.libs.size(), 0);
  246.  
  247.     std::vector<Library> libs = input.libs;
  248.     for (int i = 0; i < libs.size(); ++i)
  249.     {
  250.         for (int j = 0; j < libs[i].books.size(); ++j)
  251.         {
  252.             ++book_counter[libs[i].books[j]];
  253.         }
  254.     }
  255.  
  256.     for (int j = 0; j < input.books.size(); ++j)
  257.     {
  258.         book_rarity[j] = 1.0 / book_counter[j];
  259.     }
  260.  
  261.     for (int i = 0; i < libs.size(); ++i)
  262.     {
  263.         for (int j = 0; j < libs[i].books.size(); ++j)
  264.         {
  265.             lib_rarity[i] += book_rarity[libs[i].books[j]];
  266.         }
  267.         lib_rarity[i] /= libs[i].books.size();
  268.     }
  269.  
  270.     std::sort(libs.begin(), libs.end(),
  271.         [&lib_rarity](const Library& a, const Library& b) {
  272.             return lib_rarity[a.id] < lib_rarity[b.id];
  273.         }
  274.     );
  275.  
  276.     std::vector<bool> used_books(input.books.size(), false);
  277.  
  278.     uint32_t total_signup = 0;
  279.     for (int i = 0; i < libs.size(); ++i)
  280.     {
  281.         if (i > 0 && i % 100 == 0)
  282.         {
  283.             std::cout << i << "/" << libs.size() << " processed" << std::endl;
  284.         }
  285.         const Library& l = libs[i];
  286.         total_signup += l.signup_time;
  287.         std::vector<std::vector<uint32_t>> books_by_score(100005);
  288.         for (int j = 0; j < l.books.size(); ++j)
  289.         {
  290.             uint32_t book_id = l.books[j];
  291.             if (used_books[book_id])
  292.                 continue;
  293.  
  294.             const Book& b = input.books[l.books[j]];
  295.             books_by_score[b.score].push_back(b.id);
  296.             // books_by_score[book_scores_normalized[i]].push_back(b.id);
  297.         }
  298.  
  299.         std::vector<uint32_t> sorted_books;
  300.         for (uint32_t s = 1000; s > 0; --s)
  301.         {
  302.             for (int r = 0; r < books_by_score[s].size(); ++r)
  303.             {
  304.                 sorted_books.push_back(books_by_score[s][r]);
  305.             }
  306.         }
  307.         if (sorted_books.size() == 0)
  308.         {
  309.             total_signup -= l.signup_time;
  310.             continue;
  311.         }
  312.  
  313.         SolutionItem item;
  314.         item.lib_id = l.id;
  315.         if (input.total_time < total_signup)
  316.             break;
  317.  
  318.         uint32_t remaining_books = (input.total_time - total_signup) * l.books_per_day;
  319.         for (int r = 0; r < std::min(remaining_books, sorted_books.size()); ++r)
  320.         {
  321.             uint32_t book_id = sorted_books[r];
  322.             item.book_ids.push_back(book_id);
  323.             used_books[book_id] = true;
  324.         }
  325.  
  326.         if (item.book_ids.size() > 0)
  327.             solution.log.push_back(item);
  328.     }
  329.  
  330.     return solution;
  331. }
  332.  
  333.  
  334. Solution solve_F(const Input& input)
  335. {
  336.     Solution solution;
  337.  
  338.     std::vector<uint32_t> book_counter(input.books.size(), 0);
  339.     std::vector<double> book_rarity(input.books.size(), 0);
  340.     std::vector<double> lib_rarity(input.libs.size(), 0);
  341.     std::vector<uint32_t> lib_score(input.libs.size(), 0);
  342.     std::vector<uint32_t> book_scores_normalized(input.books.size(), 0);
  343.  
  344.     std::vector<Library> libs = input.libs;
  345.     for (int i = 0; i < libs.size(); ++i)
  346.     {
  347.         for (int j = 0; j < libs[i].books.size(); ++j)
  348.         {
  349.             ++book_counter[libs[i].books[j]];
  350.             lib_score[i] += input.books[libs[i].books[j]].score;
  351.         }
  352.     }
  353.  
  354.     for (int j = 0; j < input.books.size(); ++j)
  355.     {
  356.         book_rarity[j] = 1.0 / book_counter[j];
  357.         book_scores_normalized[j] = (uint32_t)round(input.books[j].score * 1.0 / book_counter[j]);
  358.     }
  359.  
  360.     /*for (int i = 0; i < libs.size(); ++i)
  361.     {
  362.         for (int j = 0; j < libs[i].books.size(); ++j)
  363.         {
  364.             // ++book_counter[libs[i].books[j]];
  365.             lib_score[i] += book_scores_normalized[libs[i].books[j]];
  366.         }
  367.     }*/
  368.  
  369.     for (int i = 0; i < libs.size(); ++i)
  370.     {
  371.         for (int j = 0; j < libs[i].books.size(); ++j)
  372.         {
  373.             lib_rarity[i] += book_rarity[libs[i].books[j]];
  374.         }
  375.         lib_rarity[i] /= libs[i].books.size();
  376.     }
  377.  
  378.     std::sort(libs.begin(), libs.end(),
  379.         [&lib_score, &lib_rarity](const Library& a, const Library& b) {
  380.             // return lib_score[a.id] / (a.signup_time* a.signup_time) > lib_score[b.id] / (b.signup_time* b.signup_time);
  381.             // return lib_score[a.id] * (uint64_t)a.books_per_day * 1.0 / (a.signup_time * (uint64_t)a.books.size())  > lib_score[b.id] * (uint64_t)b.books_per_day * 1.0 / (b.signup_time * (uint64_t)b.books.size());
  382.             // return lib_score[a.id] * 1.0 / a.signup_time > lib_score[b.id] * 1.0 / b.signup_time;
  383.             // return lib_score[a.id] * 1.0 / a.signup_time / a.signup_time > lib_score[b.id] * 1.0 / b.signup_time / b.signup_time;
  384.             return lib_score[a.id] * lib_rarity[a.id] * 1.0 / a.signup_time > lib_score[b.id] * lib_rarity[b.id] * 1.0 / b.signup_time;
  385.             // return lib_score[a.id] > lib_score[b.id];
  386.         }
  387.     );
  388.  
  389.     std::vector<bool> used_books(input.books.size(), false);
  390.     std::vector<bool> used_libs(input.libs.size(), false);
  391.  
  392.     /* std::vector<Library> another_libs = libs;
  393.     std::sort(another_libs.begin(), another_libs.end(),
  394.         [&lib_score](const Library& a, const Library& b) {
  395.             // return lib_score[a.id] / (a.signup_time* a.signup_time) > lib_score[b.id] / (b.signup_time* b.signup_time);
  396.             return a.signup_time < b.signup_time;
  397.             // return lib_score[a.id] > lib_score[b.id];
  398.         }
  399.     ); */
  400.  
  401.     uint32_t total_signup = 0;
  402.     for (int i = 0; i < libs.size(); ++i)
  403.     {
  404.         if (i > 0 && i % 100 == 0)
  405.         {
  406.             std::cout << i << "/" << libs.size() << " processed" << std::endl;
  407.         }
  408.         const Library& l = libs[i];
  409.         total_signup += l.signup_time;
  410.         std::vector<std::vector<uint32_t>> books_by_score(100005);
  411.         for (int j = 0; j < l.books.size(); ++j)
  412.         {
  413.             uint32_t book_id = l.books[j];
  414.             if (used_books[book_id])
  415.                 continue;
  416.  
  417.             const Book& b = input.books[l.books[j]];
  418.             books_by_score[b.score].push_back(b.id);
  419.             // books_by_score[book_scores_normalized[i]].push_back(b.id);
  420.         }
  421.  
  422.         std::vector<uint32_t> sorted_books;
  423.         for (uint32_t s = 1000; s > 0; --s)
  424.         {
  425.             for (int r = 0; r < books_by_score[s].size(); ++r)
  426.             {
  427.                 sorted_books.push_back(books_by_score[s][r]);
  428.             }
  429.         }
  430.         if (sorted_books.size() == 0)
  431.         {
  432.             total_signup -= l.signup_time;
  433.             continue;
  434.         }
  435.  
  436.         SolutionItem item;
  437.         item.lib_id = l.id;
  438.         if (input.total_time < total_signup)
  439.             break;
  440.  
  441.         uint32_t remaining_books = (input.total_time - total_signup) * l.books_per_day;
  442.         for (int r = 0; r < std::min(remaining_books, sorted_books.size()); ++r)
  443.         {
  444.             uint32_t book_id = sorted_books[r];
  445.             item.book_ids.push_back(book_id);
  446.             used_books[book_id] = true;
  447.         }
  448.  
  449.         if (item.book_ids.size() > 0)
  450.             solution.log.push_back(item);
  451.     }
  452.  
  453.     return solution;
  454. }
  455.  
  456.  
  457. Solution solve_C(const Input& input)
  458. {
  459.     Solution solution;
  460.  
  461.     std::vector<uint32_t> book_counter(input.books.size(), 0);
  462.     std::vector<double> book_rarity(input.books.size(), 0);
  463.     std::vector<double> lib_rarity(input.libs.size(), 0);
  464.     std::vector<uint32_t> lib_score(input.libs.size(), 0);
  465.     std::vector<uint32_t> book_scores_normalized(input.books.size(), 0);
  466.  
  467.     std::vector<Library> libs = input.libs;
  468.     for (int i = 0; i < libs.size(); ++i)
  469.     {
  470.         for (int j = 0; j < libs[i].books.size(); ++j)
  471.         {
  472.             ++book_counter[libs[i].books[j]];
  473.             //lib_score[i] += input.books[libs[i].books[j]].score;
  474.         }
  475.     }
  476.  
  477.     for (int j = 0; j < input.books.size(); ++j)
  478.     {
  479.         book_rarity[j] = 1.0 / book_counter[j];
  480.         book_scores_normalized[j] = (uint32_t)round(input.books[j].score * 1.0 / book_counter[j]);
  481.     }
  482.  
  483.     for (int i = 0; i < libs.size(); ++i)
  484.     {
  485.         for (int j = 0; j < libs[i].books.size(); ++j)
  486.         {
  487.             // ++book_counter[libs[i].books[j]];
  488.             // lib_score[i] += book_scores_normalized[libs[i].books[j]];
  489.             lib_score[i] += input.books[libs[i].books[j]].score;
  490.         }
  491.         lib_score[i] = lib_score[i] * libs[i].books_per_day / libs[i].books.size();
  492.     }
  493.  
  494.     double avg = 0;
  495.     for (int i = 0; i < libs.size(); ++i)
  496.     {
  497.         avg += lib_score[i];
  498.     }
  499.     avg /= libs.size();
  500.  
  501.     for (int i = 0; i < libs.size(); ++i)
  502.     {
  503.         for (int j = 0; j < libs[i].books.size(); ++j)
  504.         {
  505.             lib_rarity[i] += book_rarity[libs[i].books[j]];
  506.         }
  507.         lib_rarity[i] /= libs[i].books.size();
  508.     }
  509.  
  510.     std::sort(libs.begin(), libs.end(),
  511.         [&lib_score, &lib_rarity, &avg](const Library& a, const Library& b) {
  512.             return lib_score[a.id] / a.signup_time > lib_score[b.id] / b.signup_time;
  513.             // return lib_score[a.id] * (uint64_t)a.books_per_day * 1.0 / (a.signup_time * (uint64_t)a.books.size())  > lib_score[b.id] * (uint64_t)b.books_per_day * 1.0 / (b.signup_time * (uint64_t)b.books.size());
  514.             // return lib_score[a.id] * 1.0 / a.signup_time > lib_score[b.id] * 1.0 / b.signup_time;
  515.             // return lib_score[a.id] * 1.0 / a.signup_time / a.signup_time > lib_score[b.id] * 1.0 / b.signup_time / b.signup_time;
  516.             //return lib_score[a.id] * lib_score[a.id] / b.signup_time > lib_score[b.id] * lib_score[b.id] / b.signup_time;
  517.             // return lib_score[a.id] > lib_score[b.id];
  518.         }
  519.     );
  520.  
  521.     std::vector<bool> used_books(input.books.size(), false);
  522.     std::vector<bool> used_libs(input.libs.size(), false);
  523.  
  524.     /* std::vector<Library> another_libs = libs;
  525.     std::sort(another_libs.begin(), another_libs.end(),
  526.         [&lib_score](const Library& a, const Library& b) {
  527.             // return lib_score[a.id] / (a.signup_time* a.signup_time) > lib_score[b.id] / (b.signup_time* b.signup_time);
  528.             return a.signup_time < b.signup_time;
  529.             // return lib_score[a.id] > lib_score[b.id];
  530.         }
  531.     ); */
  532.  
  533.     uint32_t total_signup = 0;
  534.     for (int i = 0; i < libs.size(); ++i)
  535.     {
  536.         if (i > 0 && i % 100 == 0)
  537.         {
  538.             std::cout << i << "/" << libs.size() << " processed" << std::endl;
  539.         }
  540.         const Library& l = libs[i];
  541.         total_signup += l.signup_time;
  542.         std::vector<std::vector<uint32_t>> books_by_score(100005);
  543.         for (int j = 0; j < l.books.size(); ++j)
  544.         {
  545.             uint32_t book_id = l.books[j];
  546.             if (used_books[book_id])
  547.                 continue;
  548.  
  549.             const Book& b = input.books[l.books[j]];
  550.             books_by_score[b.score].push_back(b.id);
  551.             // books_by_score[book_scores_normalized[i]].push_back(b.id);
  552.         }
  553.  
  554.         std::vector<uint32_t> sorted_books;
  555.         for (uint32_t s = 1000; s > 0; --s)
  556.         {
  557.             for (int r = 0; r < books_by_score[s].size(); ++r)
  558.             {
  559.                 sorted_books.push_back(books_by_score[s][r]);
  560.             }
  561.         }
  562.         if (sorted_books.size() == 0)
  563.         {
  564.             total_signup -= l.signup_time;
  565.             continue;
  566.         }
  567.  
  568.         SolutionItem item;
  569.         item.lib_id = l.id;
  570.         if (input.total_time < total_signup)
  571.             break;
  572.  
  573.         uint32_t remaining_books = (input.total_time - total_signup) * l.books_per_day;
  574.         for (int r = 0; r < std::min(remaining_books, sorted_books.size()); ++r)
  575.         {
  576.             uint32_t book_id = sorted_books[r];
  577.             item.book_ids.push_back(book_id);
  578.             used_books[book_id] = true;
  579.         }
  580.  
  581.         if (item.book_ids.size() > 0)
  582.             solution.log.push_back(item);
  583.     }
  584.  
  585.     return solution;
  586. }
  587.  
  588.  
  589. /*Solution solve_C_BP(const Input& input)
  590. {
  591.     Solution solution;
  592.  
  593.     std::vector<uint32_t> lib_score(input.libs.size(), 0);
  594.     std::vector<Library> libs = input.libs;
  595.     for (int i = 0; i < libs.size(); ++i)
  596.     {
  597.         for (int j = 0; j < libs[i].books.size(); ++j)
  598.         {
  599.             lib_score[i] += input.books[libs[i].books[j]].score;
  600.         }
  601.     }
  602.  
  603.     std::vector < std::vector<uint32_t>> dp(2, std::vector<uint32_t>(100005, 0));
  604.  
  605.     for (int j = 0; j < input.total_time; ++j)
  606.         dp[0][j] = 0;
  607.  
  608.     for (int i = 1; i < libs.size(); ++i)
  609.         for (int j = 0; j < input.total_time; ++j)
  610.             if (libs[i].signup_time > j)
  611.                 dp[i][j] = dp[i - 1][j];
  612.             else
  613.                 dp[i][j] = std::max(dp[i - 1][j], dp[i - 1][j - libs[i].signup_time] + lib_score[i])
  614.  
  615.  
  616.     return solution;
  617. }*/
  618.  
  619.  
  620. int main()
  621. {
  622.     /* {
  623.         Timer timer("Read input");
  624.         Input input_a = read_input("input/a_example.txt");
  625.         Input input_b = read_input("input/b_read_on.txt");
  626.         Input input_c = read_input("input/c_incunabula.txt");
  627.         Input input_d = read_input("input/d_tough_choices.txt");
  628.         Input input_e = read_input("input/e_so_many_books.txt");
  629.         Input input_f = read_input("input/f_libraries_of_the_world.txt");
  630.  
  631.  
  632.     } */
  633.  
  634.     /*
  635.     {
  636.         Timer timer("Solve A");
  637.         Input input_b = read_input("input/a_example.txt");
  638.         Solution solution = solve_B(input_b);
  639.         save_solution(solution, "A.txt");
  640.  
  641.         uint32_t total_book_score = 0;
  642.         for (int i = 0; i < input_b.books.size(); ++i)
  643.             total_book_score += input_b.books[i].score;
  644.  
  645.         uint32_t score = score_solution(input_b, solution);
  646.         std::cout << "Score A: " << score << std::endl;
  647.         std::cout << "Total books score: " << total_book_score << std::endl;
  648.     }
  649.     //*/
  650.  
  651.     /*
  652.     {
  653.         Timer timer("Solve B");
  654.         Input input_b = read_input("input/b_read_on.txt");
  655.         Solution solution = solve_B(input_b);
  656.         save_solution(solution, "B.txt");
  657.  
  658.         uint32_t total_book_score = 0;
  659.         for (int i = 0; i < input_b.books.size(); ++i)
  660.             total_book_score += input_b.books[i].score;
  661.  
  662.         uint32_t score = score_solution(input_b, solution);
  663.         std::cout << "Score B: " << score << std::endl;
  664.         std::cout << "Total books score: " << total_book_score << std::endl;
  665.     }
  666.     //*/
  667.  
  668.     //*
  669.     {
  670.         Timer timer("Solve C");
  671.         Input input_b = read_input("input/c_incunabula.txt");
  672.         Solution solution = solve_C(input_b);
  673.         save_solution(solution, "C.txt");
  674.  
  675.         uint32_t total_book_score = 0;
  676.         for (int i = 0; i < input_b.books.size(); ++i)
  677.             total_book_score += input_b.books[i].score;
  678.  
  679.         uint32_t score = score_solution(input_b, solution);
  680.         std::cout << "Score C: " << score << std::endl;
  681.         std::cout << "Total books score: " << total_book_score << std::endl;
  682.     }
  683.     //*/
  684.  
  685.     /*
  686.     {
  687.         Timer timer("Solve D");
  688.         Input input_d = read_input("input/d_tough_choices.txt");
  689.         Solution solution = solve_D(input_d);
  690.         save_solution(solution, "D.txt");
  691.  
  692.         uint32_t total_book_score = 0;
  693.         for (int i = 0; i < input_d.books.size(); ++i)
  694.             total_book_score += input_d.books[i].score;
  695.  
  696.         uint32_t score = score_solution(input_d, solution);
  697.         std::cout << "Score D: " << score << std::endl;
  698.         std::cout << "Total books score: " << total_book_score << std::endl;
  699.     }
  700.     //*/
  701.  
  702.     /*
  703.     {
  704.         Timer timer("Solve E");
  705.         Input input_b = read_input("input/e_so_many_books.txt");
  706.         Solution solution = solve_F(input_b);
  707.         save_solution(solution, "E.txt");
  708.  
  709.         uint32_t total_book_score = 0;
  710.         for (int i = 0; i < input_b.books.size(); ++i)
  711.             total_book_score += input_b.books[i].score;
  712.  
  713.         uint32_t score = score_solution(input_b, solution);
  714.         std::cout << "Score E: " << score << std::endl;
  715.         std::cout << "Total books score: " << total_book_score << std::endl;
  716.     }
  717.     //*/
  718.  
  719.    
  720.     /*
  721.     {
  722.         Timer timer("Solve F");
  723.         Input input_b = read_input("input/f_libraries_of_the_world.txt");
  724.         Solution solution = solve_C(input_b);
  725.         save_solution(solution, "F.txt");
  726.  
  727.         uint32_t total_book_score = 0;
  728.         for (int i = 0; i < input_b.books.size(); ++i)
  729.             total_book_score += input_b.books[i].score;
  730.  
  731.         uint32_t score = score_solution(input_b, solution);
  732.         std::cout << "Score F: " << score << std::endl;
  733.         std::cout << "Total books score: " << total_book_score << std::endl;
  734.     }
  735.     //*/
  736.  
  737.     return 0;
  738. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement