Задача B. Подснежники
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Девочка даже руками всплеснула. Куда девались высокие сугробы? Где ледяные сосульки, что
висели на каждой ветке? Под ногами у нее — мягкая весенняя земля. Кругом каплет, течет, журчит.
Почки на ветвях надулись, и уже выглядывают из-под темной кожуры первые зеленые листики.
Глядит девочка — наглядеться не может.
«Что же ты стоишь? Торопись, нам с тобой всего один часок братья мои подарили», — говорит
ей Март.
Девочка очнулась и побежала в чащу подснежники искать. А их видимо-невидимо!
Перед девочкой N кочек. На i-й кочке растут ki подснежников. Она может выбрать одну или
несколько кочек, после чего девочка пробегает по выбранным кочкам и срывает все подснежники,
растущие на этих кочках. То есть, если среди выбранных кочек есть кочка с номером i, девочка
забирает себе ki подснежников.
Какое минимально возможное количество кочек нужно выбрать девочке, чтобы собрать ровно
K подснежников?
Формат входных данных
Первая строка входных данных содержит натуральное число N — количество кочек
и натуральное число K — количество подснежников, которое помещается в корзину/
Во второй строке находится N натуральных чисел ki — количество подснежников на каждой
кочке/
Формат выходных данных
Выведите наименьшее необходимое число кочек или 0, если набрать полную корзину подснежников невозможно.
Пример
стандартный ввод стандартный вывод
4 6 2
4 2 3 1
решить на чём угодно
using namespace std;
int main ()
{
system("CHCP 1251>NUL");
int m,n;
int max;
cout<<"m="; cin>>m;
cout<<"n="; cin>>n;
if (m==0 || n==0)
{
cout<<"не выполняется условие" << endl;
system("pause");
return 0;
}
if (n>m)
max=n;
else
max=m;
cout<<"ответ:" << endl;
for (int i =-max; i<=-1; i++) // - цикл определения отрицательных делителей.
{
if ((m%i==0)&&(n%i==0))
cout<< i <<" "; // вывод отрицательного результата
}
for (int i = 1; i<=max; i++) // цикл для определения положительных делителей
{
if ((m%i==0)&&(n%i==0))
cout<<i<<" "; // вывод положительного результата
}
cout<<endl;
system("pause");
return 0;
}
Также можно использовать равносильное выражение log2(1/p)
Вероятность взятия чёрного шара равна 10/20 = 0,5, белого - 4/20 = 0,2, жёлтого такая же - 0,2, красного - в 2 раза меньше - 0,1.
Значит, если мы взяли чёрный шар, мы получили кол-во информации log2(1/0,5) = log2(2) = 1 бит,
если белый, то log2(1/0,2) = log2(5) = 2,3219 бит
если жёлтый, то столько же 2,3219 бит
если красный, то log2(1/0,1) = log2(10) = 3,3219 бит