Черный квадрат, превышено ограничение времени - C (СИ)
Формулировка задачи:
Здравствуйте, помогите, пожалуйста. При тесте кода, превышается ограничение времени.
Вот сама задача:
Совсем недавно очень умный студент Юра решил, что сидеть на парах скучно, и скачал на свой супер крутой сенсорный телефон игру «Черный квадрат».
В игре экран телефона разделен на четыре вертикальные полоски. Каждую секунду на какой-то из полосок появляется черный квадратик, за эту секунду Юра по правилам игры должен нажать на соответствующую полоску, чтобы квадратик пропал. Поскольку Юра не только умный студент, а еще и ленивый, он посчитал, что тратит ровно ai калорий чтобы нажать на i-ю полоску.
Вам дана строка s, описывающая процесс игры, а также числа a1, a2, a3, a4. Посчитайте, сколько калорий потратит Юра, чтобы уничтожить все квадратики?
Входные данные
В первой строке через пробел записано четыре целых числа a1, a2, a3, a4 (0 ≤ a1, a2, a3, a4 ≤ 104).
Во второй строке записана строка s (1 ≤ |s| ≤ 105), где і-й символ строки равен «1», если на i-й секунде игры квадратик появится на первой полоске, «2» — если на второй, «3» — если на третьей, «4» — на четвертой.
Выходные данные
Выведите единственное целое число — суммарное количество калорий, которые потратит Юра.
Примеры
входные данные
1 2 3 4
123214
выходные данные
13
входные данные
1 5 3 2
11221
выходные данные
13
Вот код:
#include <stdio.h> int main() { int a1, a2, a3, a4, i, sum = 0; char s[100]; scanf ("%d %d %d %d", &a1, &a2, &a3, &a4); scanf ("%s", &s); for (i = 0; s[i] != '\0'; i++) { if (s[i] == '1') { sum = sum + 1 * a1; } else if (s[i] == '2') { sum = sum + 1 * a2; } else if (s[i] == '3') { sum = sum + 1 * a3; } else if (s[i] == '4') { sum = sum + 1 * a4; } } printf ("%d", sum); return 0; }
Решение задачи: «Черный квадрат, превышено ограничение времени»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main() { int a[4]; char s[100]; scanf ("%d %d %d %d", &a[0], &a[1], &a[2], &a[3]); scanf ("%s", s); int sum = 0; for(char *p = s; *p; p++) { sum += a[*p - '1']; } printf ("%d", sum); return 0; }
Объяснение кода листинга программы
- Объявлены две массивы: a[4] и s[100]
- С помощью функции scanf происходит чтение четырех целых чисел в массив a и одной строки в массив s
- Создается переменная sum и инициализируется нулем
- Происходит цикл по всем символам строки s, при этом к каждому символу прибавляется значение соответствующего элемента массива a
- В конце цикла выводится значение переменной sum
- Возвращается ноль, что означает успешный конец работы программы