vadimk772336

Untitled

Dec 21st, 2021
707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. struct info
  7. {
  8.   int group_size;
  9.   int first_element;
  10. };
  11.  
  12. void print_vector(vector<int> & v)
  13. {
  14.     cout << endl;
  15.     for (int i =0; i < v.size(); ++i)
  16.         cout << v[i] << " ";
  17.     cout << endl;
  18. }
  19.  
  20. int main()
  21. {
  22.     int n, M, K;
  23.     cin >> n >> M >> K;
  24.    
  25.     vector<struct info> groups;
  26.     vector<int> mas1(n+1,0);
  27.     vector<int> mas2(n+1,0);
  28.     vector<int> b(n);
  29.    
  30.    
  31.     int s1 = 0;
  32.     int s2 = 0;
  33.     double a;
  34.     for (int i=0; i < n; ++i)
  35.     {
  36.         cin >> b[i];
  37.         s1 += b[i];
  38.         a = (double) b[i]/K;
  39.         s2 += ceil(a);
  40.         mas1[i+1] = s1;
  41.         mas2[i+1] = s2;
  42.     }
  43.    
  44.     print_vector(mas1);
  45.     print_vector(mas2);
  46.     print_vector(b);
  47.     cout << "11" << endl;
  48.     int i = n-1;
  49.     int left, right;
  50.     int sum, len_numbers;
  51.     bool flag;
  52.     int local_max, local_max_idx, k;
  53.     int count_joined, count_alone;
  54.     cout << "11" << endl;
  55.     struct info group;
  56.     int profit = 0;
  57.     int count_groups = 0;
  58.     cout << "11" << endl;
  59.     while (i > 0)
  60.     {
  61.         cout << "Зашёл в вайл, i = " << i << endl;
  62.         if (b[i] % M == 0)
  63.         {
  64.             i -= 1;
  65.             cout << "b[i] = " << b[i]  << "- кратко пропускаю" << endl;
  66.         }
  67.        
  68.         else
  69.         {
  70.             cout << "b[i]= " << b[i] << endl;
  71.             left = (i-M+1) * ((i-M+1) > 0);
  72.             right = i+1;
  73.             sum = mas1[right]-mas1[left];
  74.             cout << "left right = " << left << " " << right  << endl;
  75.             cout << " sum = " << sum  << endl;
  76.             flag = true;
  77.  
  78.             while(flag & right-left > 1)
  79.             {
  80.                 if (sum % M == 0)
  81.                 {
  82.                     flag = false;
  83.                     cout << "sum кратно, выхожу "  << endl;
  84.                 }
  85.                 else
  86.                 {
  87.                     count_joined = ceil(sum/K);
  88.                     count_alone = mas2[right]-mas2[left];
  89.                     cout << "count_joined, count_alone = " << count_joined << " " << count_alone << endl;
  90.                     if (local_max <= count_alone-count_joined)
  91.                     {
  92.                         cout << "update local max ";
  93.                         local_max = count_alone-count_joined;
  94.                         local_max_idx = left;
  95.                         cout << local_max << " " << local_max_idx << endl;
  96.                     }
  97.                     sum -= b[left];
  98.                     left++;
  99.                     cout << " new sum = " << sum << endl;
  100.                     cout << " new left = " << left << endl;
  101.                 }
  102.             }
  103.            
  104.             if ( (sum % M != 0) & (local_max > 0) )
  105.             {
  106.                 cout << " Вышел из вайла за счёт локал макс и он больше 0" << endl;
  107.                 group.group_size = right-local_max_idx;
  108.                 group.first_element = local_max_idx+1;
  109.                 groups.push_back(group);
  110.                 profit += local_max;
  111.                 i-= group.group_size;
  112.                 count_groups++;
  113.                 cout << "profit = " << profit << endl;
  114.                 cout << "first_element = " << b[local_max_idx] << endl;
  115.                 cout << "local_profit = " << local_max << endl;
  116.             }
  117.            
  118.             else if (sum % M == 0)
  119.             {
  120.                 cout << " Вышел из вайла за счёт кратности" << endl;
  121.                 count_joined = sum/K;
  122.                 count_alone = mas2[right]-mas2[left];
  123.                 profit += count_alone-count_joined;
  124.                 cout << "count_joined, count_alone = " << count_joined << " " << count_alone << endl;
  125.                 group.group_size = right-left;
  126.                 group.first_element = left+1;
  127.                 groups.push_back(group);
  128.                 i -= group.group_size;
  129.                 count_groups++;
  130.                 cout << "profit = " << profit << endl;
  131.                 cout << "first_element = " << b[left] << endl;
  132.                 cout << "local_profit = " << count_alone-count_joined << endl;
  133.             }
  134.            
  135.             else
  136.                 i--;
  137.            
  138.         }
  139.        
  140.     }
  141.    
  142.     cout << "end " << endl;
  143.     cout << profit << endl;
  144.     cout << count_groups << endl;
  145.     for (int i = count_groups-1; i > -1; --i)
  146.         cout << groups[i].first_element << " " << groups[i].group_size << endl;
  147.    
  148.    
  149.     cout << "end2 " << endl;
  150.    
  151.     return 0;
  152. }
  153.  
Advertisement
Add Comment
Please, Sign In to add comment