Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* 2025. СТЕНКА НА СТЕНКУ
- АЛГОРИТМ: изначально происходит считывание количества тестов. После в цикле на каждой итерации происходит считывание
- общего количества людей и количества групп. Дальше высчитывается размер обыкновенной группы и количество расширенных групп.
- Дальше на каждой итерации происходит подсчет максимального количества схваток. Основные составляющие количества:
- fullGroupSize * remainder - количество людей в расширенных группах
- (n - fullGroupSize*remainder) - количество людей в обыкновенных группах
- (n - groupSize) - количество противников для людей в одной обыкновенной группе
- (n - groupSize - 1) - количество противников для людей в одной расширенной группе
- В итоге сначала происходит подсчет количества схваток между людьми из обыкновенной группы и людьми из расширенной,
- деление пополам происходит, потому что сначала произошел подсчет боев для людей из обыкновенной группы с людьми из расширенной,
- а потом наоборот. Деление пополам необходимо из-за того, что в сумме каждая схватка учитывается дважды.
- ОЦЕНКА ВРЕМЕНИ РАБОТЫ: на каждой итерации происходит константное количество операций, в итоге время работы алгоритма
- T(n) = O(n), где n - количество тестов.
- */
- #include <iostream>
- using namespace std;
- int main()
- {
- int testCount;
- cin >> testCount;
- for (int i = 0; i < testCount; ++i) {
- int n, k;
- cin >> n >> k;
- int groupSize = n / k; // размер обыкновенной группы
- int remainder = n % k; // остаток - количество увеличенных групп
- int fullGroupSize = groupSize + 1;// размер увеличенной группы
- int answer = ((n - fullGroupSize * remainder)*(n - groupSize) + (remainder * fullGroupSize)*(n - groupSize - 1)) / 2;
- cout << answer << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement