Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <algorithm>
- #include <iostream>
- using namespace std;
- #define forn(j, n) for (int j = 0; j < n; j++)
- int main()
- {
- int n, k, x, count, q, w = 0;
- double min = 101, max = -1;
- cin >> n >> k;
- vector < int > a;
- vector < int > b;
- forn(i, n)
- {
- cin >> x;
- a.push_back(x);//не изменяю больше этот вектор
- b.push_back(x);//вектор, в котором позже использованные теоремы заменяю на -1
- }
- count = n / k; //кол-во теор в билете
- cin >> q;
- double av; //среднее арифметическое
- forn(i, q)
- {
- double sum = 0;
- forn(j, count)
- {
- cin >> x;
- sum += a[x - 1];
- if (b[x - 1] != -1)
- {
- b[x - 1] = -1;
- w++; //кол-во теорем, которые были использованы и не могут попасться в др билете
- }
- }
- av = sum / count;
- if (av > max)
- max = av;
- if (av < min)
- min = av;
- }
- sort(b.begin(), b.end());
- int t = 0;
- double sum = 0;
- int ost = n - w; //кол-во теор, которых не было в использованных билетах
- if (ost >= count) //если это кол-во < кол-ва теор в 1 билете => нет смысла их считать
- {
- forn(i, n) //
- if (b[i] != -1 && t < count) //цикл сначала, но после всех -1
- {
- t++;
- sum += b[i];
- }
- av = sum / count;
- t = 0;
- sum = 0;
- if (av > max)
- max = av;
- if (av < min)
- min = av;
- for (int i = n - 1; i >= 0; i--) //цикл с конца
- if (t < count)
- {
- t++;
- sum += b[i];
- }
- av = sum / count;
- t = 0;
- if (av > max)
- max = av;
- if (av < min)
- min = av;
- }
- printf("%.6f", min);
- cout << ' ';
- printf("%.6f", max);
- }
Advertisement
Add Comment
Please, Sign In to add comment