1WaKa_WaKa1

Task_I_old

Apr 24th, 2022 (edited)
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. int main() {
  9.  
  10.     //Ввод данных
  11.     int n, k, p;
  12.     int answer = 0;
  13.     vector<int> floor;
  14.     cin >> n >> k >> p;
  15.     map<int, vector<int>> carsMap;
  16.     vector<int> subsequenceOfCars;
  17.  
  18.     for (int i = 1; i <= p; i++){
  19.         int temp;
  20.         cin >> temp;
  21.         subsequenceOfCars.push_back(temp);
  22.         if (floor.empty() || (find(begin(floor), end(floor), temp) == end(floor) && floor.size() < k)){
  23.             floor.push_back(temp);
  24.             answer+=1;
  25.         }
  26.         if (carsMap.count(temp) == 0) {
  27.             vector<int> tempVec = {i};
  28.             carsMap.insert(make_pair(temp, tempVec));
  29.         } else {
  30.             carsMap[temp].push_back(i);
  31.         }
  32.  
  33.     }
  34.  
  35.     //Тело программы
  36.     for (auto i : subsequenceOfCars){
  37.         auto temp = find(begin(floor), end(floor), i);
  38.         if (temp != end(floor)){
  39.             carsMap[i].erase(carsMap[i].begin());
  40.         } else {
  41.             int max = 0;
  42.             int tempInd = 0;
  43.             for (auto j : carsMap){
  44.                 if (j.second.empty() && find(begin(floor), end(floor), j.first) != end(floor)){
  45.                     tempInd = j.first;
  46.                     break;
  47.                 }
  48.                 if (!j.second.empty() && find(begin(floor), end(floor), j.first) != end(floor) && (j.first != i)&& *(j.second.begin()) > max){
  49.                     max = *(j.second.begin());
  50.                     tempInd = j.first;
  51.                 }
  52.             }
  53.             if (tempInd != 0) {
  54.                 temp = find(begin(floor), end(floor), tempInd);
  55.                 floor.erase(temp);
  56.                 floor.insert(floor.begin(), i);
  57.                 carsMap[i].erase(carsMap[i].begin());
  58.                 answer += 1;
  59.             } else {
  60.                 floor.erase(floor.begin());
  61.                 floor.insert(floor.begin(), i);
  62.                 carsMap[i].erase(carsMap[i].begin());
  63.                 answer += 1;
  64.             }
  65.         }
  66.     }
  67.  
  68.     //Вывод
  69.     cout << answer;
  70.  
  71.     return 0;
  72.  
  73. }
  74.  
Add Comment
Please, Sign In to add comment