Клавиатура
Всем известно, что со временем клавиатура изнашивается, и клавиши на ней начинают залипать. Конечно, некоторое время такую клавиатуру ещё можно использовать, но для нажатий клавиш приходиться использовать большую силу.
При изготовлении клавиатуры изначально для каждой клавиши задаётся количество нажатий, которое она должна выдерживать. Если знать эти величины для используемой клавиатуры, то для определённой последовательности нажатых клавиш можно определить, какие клавиши в процессе их использования сломаются, а какие — нет.
Требуется написать программу, определяющую, какие клавиши сломаются в процессе заданного варианта эксплуатации клавиатуры.
Входные данные
Первая строка входных данных содержит целое число n (1≤n≤100) — количество клавиш на клавиатуре. Вторая строка содержит n целых чисел — c1,c2,…,cn, где ci(1≤ci≤100000) — количество нажатий, выдерживаемых i-ой клавишей. Третья строка содержит целое число k (1≤k≤100000) — общее количество нажатий клавиш, и последняя строка содержит k целых чисел pj(1≤pj≤n) — последовательность нажатых клавиш.
Выходные данные
Необходимо вывести n строк, содержащих информацию об исправности клавиш. Если i-ая клавиша сломалась, то i-ая строка должна содержать слово “yes” (без кавычек), если же клавиша работоспособна — слово “no”.
Примеры
Ввод:
5
1 50 3 4 3
16
1 2 3 4 5 1 3 3 4 5 5 5 5 5 4 5
Вывод:
yes
no
no
no
yes
Помогите пожалуйста на c++
Answers & Comments
Ответ:
Поскольку в условии не сказано, каким образом поступать с входными данными (должны ли они оставаться неизменными после завершения работы программы или нет), введем понятие "ресурс клавиши" и будем хранить ресурс для каждой из клавиш в массиве c.
Ресурс - текущее состояние клавиши (сколько еще нажатий она может выдержать. В начале ресурс равен кол-ву нажатий, выдерживаемых клавишей). Каждый раз, когда мы получаем очередное число из четвертой строки (новую нажатую клавишу), мы уменьшаем ее ресурс.
В итоге все клавиши, у которых ресурс оказался меньше нуля, будут неработоспособны. Исходный код и результат работы представлен ниже:
#include <iostream>
int main()
{
int n; // Количество клавиш на клавиатуре
int c[100]; // Количество нажатий, выдерживаемых i-ой клавишей
int k; // Общее количество нажатий клавиш
int i; // Счетчик
int key; // Нажатая клавиша
// Первая строка
std::cin >> n;
// Вторая строка
for (i = 0; i < n; i++)
std::cin >> c[i];
// Третья строка
std::cin >> k;
// Четвертая строка
for (i = 0; i < k; i++)
{
std::cin >> key;
c[key - 1]--; // Уменьшаем ресурс клавиши
}
for (i = 0; i < n; i++)
{
// Если ресурс израсходован, клавиша сломана
if (c[i] < 0) std::cout << "yes" << std::endl;
else std::cout << "no" << std::endl;
}
return 0;
}