martarubtsova

Untitled

Jan 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #include <vector>
  2. #include <algorithm>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. #define forn(j, n) for (int j = 0; j < n; j++)
  8.  
  9. int main()
  10. {
  11.     int n, k, x, count, q, w = 0;
  12.     double min = 101, max = -1;
  13.     cin >> n >> k;
  14.     vector < int > a;
  15.     vector < int > b;
  16.     forn(i, n)
  17.     {
  18.         cin >> x;
  19.         a.push_back(x);//не изменяю больше этот вектор
  20.         b.push_back(x);//вектор, в котором позже использованные теоремы заменяю на -1
  21.     }
  22.     count = n / k; //кол-во теор в билете
  23.     cin >> q;
  24.     double av; //среднее арифметическое
  25.     forn(i, q)
  26.     {
  27.         double sum = 0;
  28.         forn(j, count)
  29.         {
  30.             cin >> x;
  31.             sum += a[x - 1];
  32.             if (b[x - 1] != -1)
  33.             {
  34.                 b[x - 1] = -1;
  35.                 w++; //кол-во теорем, которые были использованы и не могут попасться в др билете
  36.             }
  37.         }
  38.         av = sum / count;
  39.         if (av > max)
  40.             max = av;
  41.         if (av < min)
  42.             min = av;
  43.     }
  44.     sort(b.begin(), b.end());
  45.     int t = 0;
  46.     double sum = 0;
  47.     int ost = n - w; //кол-во теор, которых не было в использованных билетах
  48.     if (ost >= count) //если это кол-во < кол-ва теор в 1 билете => нет смысла их считать
  49.     {
  50.         forn(i, n) //
  51.             if (b[i] != -1 && t < count) //цикл сначала, но после всех -1
  52.             {
  53.                 t++;
  54.                 sum += b[i];
  55.             }
  56.         av = sum / count;
  57.         t = 0;
  58.         sum = 0;
  59.         if (av > max)
  60.             max = av;
  61.         if (av < min)
  62.             min = av;
  63.         for (int i = n - 1; i >= 0; i--) //цикл с конца
  64.             if (t < count)
  65.             {
  66.                 t++;
  67.                 sum += b[i];
  68.             }
  69.         av = sum / count;
  70.         t = 0;
  71.         if (av > max)
  72.             max = av;
  73.         if (av < min)
  74.             min = av;
  75.     }
  76.     printf("%.6f", min);
  77.     cout << ' ';
  78.     printf("%.6f", max);
  79. }
Advertisement
Add Comment
Please, Sign In to add comment