Skip to content

Latest commit

 

History

History
178 lines (149 loc) · 10.8 KB

spinners.md

File metadata and controls

178 lines (149 loc) · 10.8 KB

https://vos.olimpiada.ru/upload/files/Arhive_tasks/2017-18/school/iikt/ans-iikt-9-11-msk-sch-17-8.pdf

1. Спиннеры

#include <iostream>
using namespace std;

int main () {
	int a,b,c;
	cout << "a: ";
	cin >> a;
	cout << "b: ";
	cin >> b;	
	cout << "c: ";
	cin >> c;
	int n = (c - a) / b;
	cout << "n = " << n << endl;
	cout << "---------------------------------\n";
	main();
}

Спиннер - модная игрушка с подшипниками в основании, к которому прикреплены лопасти. Афанасий открыл бизнес по производству спиннеров. Он выяснил, что за спиннер, у которого N лопастей покупатели готовы платить A + B x N рублей, но при этом покупатель не станет покупать спиннер, если его цена будет выше C рублей. Определите максимальное число лопастей спиннера, который согласится приобрести покупатель.
Программа получает на вход три числа A, B, C (стоимость основания спиннера, стоимость одной лопасти и максимальная стоимость всего спиннера). Все числа-целые положительные, не превосходящие 2х109, при этом A < C
Программа должна вывести одно число – максимальное число лопастей спиннера.

image

2. Снова спиннеры

#include <iostream>
using namespace std;

int main () {
	int m;
	cout << "m: ";
	cin >> m;
	int blades4 = m % 3;
	int blades3 = (m - 4 * blades4) / 3;
	if (blades3 >= 0) {
		cout << blades3 << endl;
		cout << blades4 << endl;
	}
	else {
		cout << "Error!";
	}
	cout << "---------------------------------------\n";
	main();
}

Денис тоже решил заняться производством и продажей спиннеров, но он считает, что у спиннера может быть только три или четыре лопасти. У него есть ровно M лопастей, которые он может прикреплять к основаниям, и неограниченный запас оснований. Он хочет изготовить несколько трёхлопастных и несколько четырёхлопастных спиннеров так, чтобы использовать все M лопастей. Определите, сколько спиннеров каждого вида он должен произвести.
Программа получает на вход одно целое положительное число M, не превосходящее 2×109, – количество лопастей, которое есть у Дениса.
Программа должна вывести два целых числа – количество спиннеров с 3 лопастями и количество спиннеров с 4 лопастями, которые должен произвести Денис. Если у задачи есть несколько решений, нужно вывести любое из них. Если Денис не может использовать ровно M лопастей для производства спиннеров, программа должна вывести два числа 0.

image

3. Не про спиннеры

#include <iostream>
using namespace std;

int main () {
	int x, y, result;
	cout << "x: ";
	cin >> x;
	cout << "y: ";
	cin >> y;
	for (int i = 0; i < x; i++) {
		for (int j = i; j < x; j++) {
			for (int i = 0; i < y; i++) {
				for (int j = i; j < y; j++) {
					result++;
				}
			}
		}
	}
	cout << result << endl;
	cout << "--------------------------------------------\n";
	main();
}

Саша совсем не любит спиннеры, поэтому он рисует в тетрадке. Он взял тетрадный лист из N × M клеточек и пронумеровал все клетки различными числами. Теперь ему стало интересно, сколько различных прямоугольников он может вырезать из этого листа бумаги по границам клеточек.
Программа получает на вход два числа N и M – размеры исходного листа. Все числа – целые положительные, не превосходящие 75000.
Программа должна вывести одно число – количество прямоугольников, которые можно вырезать из данного листа бумаги (весь лист целиком также считается одним из возможных прямоугольников).

image

4. Плацкартный вагон

#include <iostream>
using namespace std;

int CoupeNumber(int k) {
	if (k > 36) {
		return 8 - (k - 37) / 2;
	}
	else {
		return (k - 1) / 4;
	}
}

int main () {
	int coupe[9];
	int N, place;
	cout << "N: ";
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> place;
		coupe[CoupeNumber(place)] += 1;
	}
	int result = 0;
	int curr = 0;
	
	for (int i = 0; i < 9; i++) {
		if (coupe[i] == 6) {
			curr += 1;
			result = max(result, curr);
		}
		else {
			curr = 0;
		}
	}
	cout << result << endl;
	cout << "----------------------------------------\n";
	main();
}

В плацкартном вагоне 54 места, пронумерованных числами от 1 до 54. Вагон разбит на 9 купе. Первые 36 мест расположены по левую сторону от прохода, места 1–4 находятся в первом купе, места 5–8 – во втором и т. д. В девятом купе находятся места с номерами 33–36. По правую сторону от прохода находятся боковые места, их номера от 37 до 54, причём они нумеруются в противоположном направлении: места 37 и 38 находятся напротив девятого купе, а места 53 и 54 – напротив первого. Ниже приведена схема всех мест в вагоне.

image

Группа школьников едет на олимпиаду и будет всю дорогу крутить спиннеры. Поэтому им нужно купить места в нескольких подряд идущих купе вместе с прилегающими боковыми местами. Даны номера свободных мест в поезде. Определите, какое наибольшее число подряд идущих купе полностью свободны.

Программа получает на вход число N – количество свободных мест в вагоне (0 ≤ N ≤ 54). Следующие N строк содержат номера свободных мест – различные числа от 1 до 54 в произвольном порядке, по одному числу в строке.

Программа должна вывести одно целое число – максимальное число подряд идущих свободных купе (купе – 4 места слева от прохода и 2 боковых места) в этом вагоне.

image

5. Кинотеатр

#include <iostream>
using namespace std;

int main () {
	int N, K;
	cout << "N: ";
	cin >> N;
	cout << "K: ";
	cin >> K;
	while (K != 1) {
		N = (N - K % 2) / 2;
		K = K / 2;
	}
	cout << (N - 1) / 2 << endl;
	cout << N / 2 << endl;
	cout << "------------------------------\n";
	main();
}

В первом ряду кинотеатра N + 2 мест, крайние места заняты персоналом кинотеатра, но N мест посередине свободно. K школьников входят в зрительный зал по очереди, и, конечно же, каждый школьник достаёт спиннер и начинает его крутить до начала сеанса. Поэтому каждый школьник выбирает себе место как можно дальше от уже занятых мест. А именно, школьник находит самый большой свободный участок в ряду (любой, если таких несколько) и садится посередине него. Если число свободных мест на этом участке было нечётно, то школьник садится точно посередине участка, тогда слева и справа от него остаётся поровну свободных мест. Если же это число чётно, то школьник выбирает одно из двух свободных мест посередине, тогда с одной стороны от школьника будет на одно свободное место больше, чем с другой стороны.

По данным числам N и K определите, сколько мест осталось свободными с двух сторон от школьника, который занял место последним (K-м по счёту).

Программа получает на вход два целых числа N и K, 1 ≤ K ≤ N ≤ 1018, и должна вывести два целых числа в порядке неубывания – количество свободных мест с двух сторон от школьника, который последним занял место в ряду.

image