АА13

Задача

В заданной строке поменять местами рядом стоящие символы между собой (1 и 2, 3 и 4 и т.д., для строки нечетной длины, последний символ не менять).

Тесты

Входные данные Выходные данные
123456 214365
abcde badce

Код программы

Решение

Так как объекты класса String являются неизменяемыми, то преобразуем строку в массив символов с помощью метода toCharArray. Далее создаем переменную для временного хранения значений символов, чтобы можно было поменять местами соседние символы строки. Используя цикл, проходим по каждому второму символу строки и меняем его с предыдущим. Измененный массив преобразовываем в строку и выводим.

Ссылки

Код решения

e-olymp 2164. Шифр Юлия

Задача

Юлий Цезарь использовал свой способ шифрования текста. Каждая буква заменялась на следующую по алфавиту через $k$ позиций по кругу. Необходимо по заданной шифровке определить исходный текст.

Входные данные

В первой строке дана шифровка, состоящая из не более чем $255$ заглавных латинских букв. Во второй строке число $k \left ( 1 \leq k \leq 10 \right ).$

Выходные данные

Вывести результат расшифровки.

Тесты

Входные данные Выходные данные
$XPSE \\ 1$ $WORD$
$ZABC \\ 3$ $WXYZ$
$WURYAD \\ 4$ $SQNUWZ$

Код программы

Решение

Для решения задачи вводим строки $str$ и $str1$ и преобразуем их в массив символов $(char)$. Чтобы расшифровать слово, находящееся в строке
$s$, необходимо заменить каждую букву данной строки на букву, находящуюся на $(find — k)$ позиции строки $s1$, где $s1$ — строка, содержащая латинский алфавит, а $find$ — позиция заменяемой буквы в алфавите. В случае если разница $find$ и $k$ меньше нуля, заменяем букву строки $s$ на букву, находящуюся на $(26 — (k — find))$ позиции строки $s1$, то есть, не считая то количество позиций, которые уже были пройдены от изначального символа до первого символа строки $s1$. Можно не беспокоиться о том, что символ вернется к концу алфавита более, чем один раз так как условие исключает этот вариант ($ k \leq 10$ при 26-ти символах латинского алфавита).

Ссылки

Условие задачи на e-olymp

Код решения задачи ideone

e-olymp 2197. Антипалиндром

Задача

Палиндромом называют строку, читающуюся одинаково с обеих сторон. Задана строка [latex]s[/latex]. Найдите её наибольшую по длине подстроку, не являющуюся палиндромом.

Входные данные

Входной файл содержит строку [latex]s[/latex]. Она состоит только из строчных букв латинского алфавита, не пуста, её длина не превышает 100000 символов.

Выходные данные

В выходной файл выведите ответ на задачу, если ответов несколько — выберите лексикографически минимальный. Если все подстроки s являются палиндромами, выведите в выходной файл NO SOLUTION.

Тесты

# Входные данные Выходные данные
1 abba abb
2 aaaaaaa NO SOLUTION
3 abcghgcba abcghgcb
4 abaaabbb abaaabbb

Код

Решение

  • Проверка на строку, состоящую из одинаковых символов
  • Проверка на палиндром
  • Вывод в лексикографическом порядке

Ссылки

Задача на e-olymp

Код задачи на ideone

e-olymp 2618. Следующее число

Следующее число

Дано число $n$. Необходимо вывести число $n+1$.

Входные данные:

Дано неотрицательное целое число $n$. Известно, что количество цифр в числе не превышает $10^6$.

Выходные данные:

Вывести число $n+1$.

Тесты

# ВХОДНЫЕ ДАННЫE: ВЫХОДНЫЕ ДАННЫЕ:
1 45654 45655
2 5799 5800
3 2131312 2131313
4 0 1
5 699999 700000

 

Код программы:

Решение задачи:

Для решения данной задачи будем использовать строки, так как заданное число превышает максимально возможное значение любых числовых переменных. Далее создаём функцию, которая будет определять всё написанное в строке до и после символа $+$ как подстроку, после чего создаём функцию, которая суммирует эти подстроки. Исполнив этот алгоритм получим правильный ответ.

  • Задача на сайте e-olymp
  • Код решения в Ideone

e-olymp 266. Сравнение

Сравнение

Сравните два числа A и B.

Входные данные

Во входном файле задано два целых неотрицательных числа A и B $(A, B <= 10^{10000})$ каждое в своей строке.

Выходные данные

В выходной файл выведите <, если A < B, = , если A = B и >, если A > B.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 $2$ $1$ $>$
2 $1$ $2$ $<$
3 $1$ $1$ $=$

 

Код программы

Решение задачи

Данную задачу будет решать методом сравнения по длине, так как числа могут превышать максимальное значение числовых классов. Если длина первого числа больше, чем длина второго, то выводим символ <. Если длина первого числа меньше, чем длина второго, то выводим символ >. Если длина двух чисел одинаковая, то будем сравнивать цифры данных чисел до тех пор, пока не найдем большую. Символ равенства будем выводить лишь тогда, когда длина чисел одинаковая и каждая цифра одного числа равна каждой цифре второго.

Ссылки

• Задача на e-olymp.

• Решение на сайте ideone.

e-olymp 662. Налог

Условие задачи

«Курс валюты Зимбабве опустился накануне до рекордно низкого уровня — $1.2$ млрд. зимбабвийских долларов за один доллар США»
(Новости от $07.06.2009$ )

В некоторой стране инфляция достигла таких размеров, что доходы граждан стали выражаться числами, количество знаков в десятичной записи которых доходит до $200$. Это сильно усложнило задачу взимания налогов.

Один из налогов на доходы составляет $1$. Напишите программу, которая по введенному числу $D$ (величине дохода гражданина) вычислит этот налог.

При этом применяются следующие правила округления:

  1. Если налог выражается целым числом, то он не округляется.
  2. Если налог выражается дробным числом, то он округляется в сторону большего целого (в пользу государства).

Входные данные
Вводится одно число $D$ (натуральное,$10^{5}⩽D<10^{200}$ ) – величина дохода гражданина.
Выходные данные
Выведите одно натуральное число – величину налога.
Тесты

Входные данные Выходные данные
12345600
123456
158874554
1588746
1000001
10001
555555
5556

Код программы

Решение задачи
Так как у нас по условию $10^{200}$ нам нужно использовать String, ибо в long такое число не поместится. Поэтому, есть строка, каждый символ которой, это цифра. Округляем по условию, то есть если последние два символа — нули, то просто выдаем подстроку, без последних двух символов ( s.substring(0, s.length() - 2) ). В любом случае, нужно округлять вверх, для этого, к третей с конца цифре добавляем один. Если цифра была $9$, то она станет $0$, а к следующей по возрастанию цифре применим такое-же действие. Если текущая цифра последняя, то нужно добавить перед ней еще единицу.
Ссылки
Задача на сайте e-olymp
Код решения в Ideone

e-olymp 7340. Поле-чудес

Задача

Петрик і Марічка захопились грою поле-чудес: Марічка записує слово, що складається з великих англійських букв, а Петрик старається розпізнати його, причому відгадана буква відкривається на всіх позиціях, де вона міститься. За яку найменшу кількість ходів Петрик зможе відгадати задане слово.

Вхідні дані

Слово записане великими англійськими буквами (не більше [latex]100[/latex] символів).

Вихідні дані

Відповідь до задачі.

Тести

Вхідні дані Вихідні дані
[latex]GOOGLE[/latex] [latex]4[/latex]
[latex]ALBUS[/latex] [latex]5[/latex]
[latex]OOO[/latex] [latex]1[/latex]

Код програми

Рішення завдання

Створимо місце для слова і прочитаємо його,далі для того, щоб однакові букви йшли поряд і заведемо змінну, спочатку рівну [latex]1[/latex], так як слово складається мінімум з однієї букви, і будемо збільшувати її на [latex]1[/latex], якщо зустрінеться нова буква..

Код програми з множиною

Рішення завдання

Створимо місце і прочитаємо слово. Подалі кожну букву слова запишемо, як елемент множини [latex]і.[/latex] Так як множина автоматично видаляє всі однакові елементи, то відповіддю до завдання буде кількість елементів множини.

Посилання

Умова завдання на e-olymp.com.

Код рішення на ideone.com.

Код рішення з множиною на ideone.com.

e-olymp 313. A + B

A + B

Пете задали домашнее задание: найти сумму 2-х натуральных чисел A и B.

Входные данные

В первой строке задано количество заданных Пете примеров N, а далее следует N строк в формате A+B, где A и B — 2 заданных натуральных числа, между ними без пробелов символ выполнения действия сложения «+».
Соответствие входных данных указанному формату гарантируется (см. пример входных данных). Входные данные не превышают $10^{500}$. $(0 < N <= 250)$

Выходные данные

В N строках вывести искомые суммы.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 $2$
$5+3$
$14818641113280510+52467$
$8$
$14818641113332977$
2 $1$
$0+0$
$0$
3 $3$
$1+1$
$1+2$
$1+3$
$2$
$3$
$4$
4 $2$
$123123123 + 321321321$
$321321321 + 123123123$
$444444444$
$444444444$

 

Код программы

Решение задачи

Для решения данной задачи будем использовать класс BigInteger, поскольку в наших вычислениях могут получиться числа, превышающие максимальное значение класса Long. k-тым элементом обозначим символ «+». Далее, складываем все элементы до k-того элемента и после него, переводя эти числа в объект класса BigInteger.

Ссылки

• Задача на e-olymp.

• Решение на сайте ideone.

e-olymp 1080. Анаграмматическое расстояние

Задача

Два слова называются анаграмматически одинаковыми, если из букв одного слова можно получить другое слово. Например, occurs является анаграммой для слова succor; и наоборот, dear не является анаграммой слова dared (так как буква d встречается дважды в dared, и только один раз в dear). Наиболее известной английской анаграммой являются слова dog и god.

Анаграмматическим расстоянием двух слов называется минимальное количество букв, которые нужно удалить, чтобы в результате два слова стали анаграмматически одинаковыми. Например, для слов sleep и leap, нужно удалить как минимум три буквы — две из sleep и одну из leap — чтобы остались анаграмматически одинаковые слова (в указанном случае lep). А для слов dog и cat, в которых нет одинаковых букв, анаграмматическое расстояние равно $6$, так как нужно удалить все буквы. (Любое слово, в том числе и пустая строка, являются анаграммой само к себе.)

Ваша задача найти анаграмматическое расстояние для заданных двух слов.

Входные данные

В первой строке задано положительное целое число $N$ (не превышающее $60000$), указывающее количество тестовых примеров. Каждый тестовый пример состоит из двух слов, возможно пустых, каждое из которых записано в отдельной строке (всего $2N$ последующих строк).

Все слова, имеющие не нулевую длину, сформированы из строчных букв английского алфавита (abcdefghijklmnopqrstuvwxyz). Самым длинным словом является pneumonoultramicroscopicsilicovolcanoconiosis.

Выходные данные

Для каждого примера входных данных вывести в отдельной строке номер тестового случая и анаграмматическое расстояние, отформатированные так, как показано в примере выходных данных.

Тесты

Входные данные Выходные данные
4
crocus
succor
dares
seared
empty

smell
lemon

Case #1:  0
Case #2:  1
Case #3:  5
Case #4:  4
3
dog
god
cat
dog
dragon
fly
Case #1:  0
Case #2:  6
Case #3:  9
1
cow

Case #1:  3
1
memory
moratory
Case #1:  6

Код программы

Решение

Создадим массив на $26$ элементов, соответствующих буквам латинского алфавита. Для каждой буквы первого слова будем увеличивать на $1$ соответствующий ей элемент, а для каждой буквы второго слова — уменьшать. В конце, полученные значения будут указывать на то, сколько в первом слове «лишних» букв по сравнению со вторым (и наоборот, в случае отрицательных значений). Сумма абсолютных значений элементов массива и будет являться анаграмматическим расстоянием для указанных слов.

Ссылки

Условие задачи на e-olymp
Решение на ideone
Решение на e-olymp

e-olymp 2803. МаркЕрованные кубики

Задача


У Витека есть набор кубиков, на котором изображены английские буквы, причём как маленькие, так и большие. Недавно мама подарила ему ещё и набор кубиков с цифрами, в результате чего Витек научился быстро считать в пределах [latex]10-[/latex]ти. А вот папа имел неосторожность подарить ему набор разноцветных маркеров, после чего Витек начал экспериментировать с кубиками с цифрами: он зарисовывал очередную цифру и на её месте рисовал цифру на единицу большую. Так как он прекрасно понимал, что цифры [latex]10[/latex] не существует, он вместо числа [latex]10[/latex] всегда писал цифру [latex]0.[/latex]

Учтите, что иногда мама звала Витека покушать и он не успевал завершить начатую работу и написать новую цифру – в этом случае кубик навсегда оставался пустым, такие кубики обозначены символом пробела.

Вам необходимо помочь Витеку и написать программу, которая выполнит очередную маркЕровку кубиков по указанным правилам. Так как Вы находитесь не дома, а на олимпиаде, то мама Вас кушать не позовёт и работу Вам обязательно нужно закончить.

Входные данные

Единственная строка, состоящая из описанных выше символов. Длина строки не превышает [latex]255[/latex] символов.

Выходные данные

Единственная строка – результат работы Вашей программы.

Тесты

# Входные данные Выходные данные
1 abc1234567890ABC abc2345678901ABC
2 fgrt7645gft5 fgrt8756gft6
3 65748909674 76859010785
4 6ASD4890gf9674 7ASD5901gf0785
5 RFT768S7dfr RFT879S8dfr

Код программы

Решение задачи

Для решения задачи вводим строку [latex]str[/latex] и преобразовываем её в массив символов. Так как у Витека есть кубики с буквами и цифрами, то проверяем, является ли элемент строки числом. Если да, то увеличиваем значение символа на [latex]1,[/latex] а если это [latex]9,[/latex] то заменяем её на [latex]0.[/latex]

Ссылки

Ссылка на e-olymp

Ссылка на ideone