e-olymp 9531. Комплексные числа: сложение и вычитание

Условие

Даны два комплексных числа. Найдите их сумму или разность.

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

В каждой строке задан пример на сложение или вычитание комплексных чисел. Комплексное число задается в формате $a+bi$ или $a — bi$, где $a$ целое, $b$ целое неотрицательное. Действительная и мнимая часть каждого комплексного числа по модулю не превышает $10^{9}$.

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

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

Тесты

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

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

1
2+3i + 7-4i
9-1i
2
-1-1i — -1-1i
0+0i
3 56743+876i — 1234-124i 55509+1000i
4 331+10i — 331+10i 0+0i

Код

Решение

Чтобы решить задачу будем разбивать строки на подстроки методом .split() тогда, для каждой строки у нас будет массив из трёх её подстрок, где первый и третий элементы — комплексные числа, а второй — арифметическая операция производимая над ними. Далее оба комплексных числа так же, с помощью .split(), разобьем на реальную и мнимую части и выполним сложение или вычитание соответственных элементов.

Ссылки

E-olymp

Ideone

e-olymp 9407. Слияние строк

Задача

Имеются две строки $A$ и $B$.

Ваша задача — найти такую строку $C$, которая содержит в себе и $A$ и $B$ в качестве подстрок и является кратчайшей среди всех таких возможных строк.

Подстрокой строки называется последовательно идущая подпоследовательность этой строки. Например, строка $kbtu$ является подстрокой строки $kbtu open$, но строка $fall$ подстрокой не является.

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

Первая строка содержит строку $A$ $(1 \leqslant |A| \leqslant 10^5)$.

Вторая строка содержит строку $B$ $(1 \leqslant |B| \leqslant 10^5)$.

Гарантируется, что обе строки содержат только строчные латинские буквы.

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

Выведите одну строку $C$.

Тесты

Входные данные Выходные данные
1. compressing
single
compressingle
2. can
you
canyou
3. compressiondoneright
doner
compressiondoneright
4. details
tail
details
5. essential
code
essentialcode

Код

Решение

В данной задаче необходимо создать строку $C$, которая будет содержать в себе строки $A$ и $B$. Рассмотрим два варианта решения задачи. Первый – если строка $B$ полностью содержится в строке $A$, то выводим строку $A$. Второй – если строка $B$ содержится в $A$ частично или не содержится вообще, выводим строку $A$ $+$ элементы строки $B$, которых нет в $A$.

Для проверки, находится ли строка $B$ в $A$, воспользуемся функцией contains(). Если попадаем в первый вариант решения задачи, то выводим $A$. Иначе, создаём цикл, который будет удалять символы в конце первой строки и символы в начале второй, пока они не будут равны. Затем из строки $B$ удаляем элементы, которые входят в строку $A$, и на выход подаём строку $C$, которая состоит из строки $A$ и оставшихся элементов строки $B$.

Ссылки

  • Условие задачи на e-olymp
  • Код программы на ideone.com
  • Засчитанное решение на e-olymp

АА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.