Многоуровневая маркетинговая задача.
Пэр хочет получить вознаграждение. Таким образом, это привлекло N
инвесторов ( N>=1
), каждый i-й инвестор инвестировал x[i]
. Когда общая сумма превышает порог, x[0]+x[1]+...+x[N-1] >= T
партнер может быть вознагражден. Но только при соблюдении следующих условий:
- Минимальное количество инвесторов должно быть больше
M
, (M<=N
) - По крайней мере, для одного целого числа
k
, гдеk>=M
иk<=N
любыеk
инвесторы должны вкладывать, по крайней мере,T/k
каждое;
Учитывая, что N, x[], T, M
вы должны определить, генерируется ли вознаграждение пира или нет (логический результат, «да» или «нет»). Самый короткий код выигрывает.
Примеры:
N=5; M=3; T=10000
, чтобы получить вознаграждение пэра, должно быть выполнено одно из следующих условий:
- любые 3 инвестированы не менее 3334 каждый
- любые 4 инвестировали не менее 2500 каждый
- все 5 вложено не менее 2000 каждый
N=6; M=2; T=5000
:
- любые 2 инвестированы не менее 2500 каждый
- любые 3 инвестированы не менее 1667 каждый
- любые 4 инвестировали не менее 1250 каждый
- любые 5 вложено не менее 1000 каждый
- все 6 вложено не менее 834 каждый
обобщенно: для любого k
, где k>=M
и k<=N
:
- любой
k
изN
инвесторов вложил хотя быT/k
каждого
Тестовые случаи:
формат:
N, x[], T, M -> correct answer
6, [999, 999, 59, 0, 0, 0], 180, 3 -> 0
6, [0, 60, 0, 60, 60, 0], 180, 3 -> 1
6, [179, 89, 59, 44, 35, 29], 180, 3 -> 0
6, [179, 89, 59, 44, 35, 30], 180, 3 -> 1
6, [179, 89, 59, 44, 36, 29], 180, 3 -> 1
6, [179, 90, 59, 44, 35, 29], 180, 3 -> 0
6, [30, 30, 30, 30, 29, 30], 180, 3 -> 0
6, [30, 30, 30, 30, 30, 30], 180, 3 -> 1
true
и истинное значение для false
?
len(x)
будет короче, чем письмоN
. Это сделано потому, что для динамически размещаемого массиваx
в C нет прямойlen(x)
функции - поэтому вы всегда можете ссылаться на length какN
. Для удобства вы можете рассматривать все входные данныеN, x[], T, M
как некоторые внешне определенные константы или как встроенные в язык.