Олимпиадное программирование: Ввод, вывод и числа
← К списку тем Глава 02 · Техника программирования

Ввод, вывод и числа

Программа получает данные, вычисляет ответ и печатает его в нужном формате. Сравнивай примеры на C++ и Python: задача у них одна, а способы работы с числами иногда различаются.

  • 01 C++ и Python
  • 02 Ввод и вывод
  • 03 Числа и деление

Как программа читает и печатает данные

Обе программы ниже читают два целых числа и печатают их сумму. В C++ для этого используются cin и cout; строка using namespace std; позволяет записывать эти имена без префикса. В Python функция print() выводит результат.

C++
#include <iostream>
using namespace std;

int main() {
 long long left, right;
 cin >> left >> right;
 cout << left + right << '\n';
}
Python 3
import sys

left, right = map(int, sys.stdin.read().split())
print(left + right)
Ввод
8
13
Вывод
21

В проверяющей системе не печатай приглашения вроде «Введите два числа». В выводе должен быть только ответ, который требует условие.

Пробелы и новые строки

Ввод 8 13 и числа на двух строках дают одинаковый ответ. В C++ cin >> пропускает пробельные разделители. Python-пример читает весь ввод и разделяет его с помощью split().

Если оба числа в одной строке, в Python подойдёт left, right = map(int, input().split()). Функция input() читает одну строку; основной пример использует sys.stdin.read(), чтобы обрабатывать и разные строки.

Для вывода на C++ удобно использовать '\n'; endl дополнительно сбрасывает буфер.

Когда данных очень много

Если ввод становится узким местом, можно читать и настраивать потоки так:

C++ · в начале main
ios::sync_with_stdio(false);
cin.tie(nullptr);
Python 3
import sys
numbers = map(int, sys.stdin.buffer.read().split())

Это лишь способы чтения данных. Сначала проверь правильность программы, затем её скорость и расход памяти.

Какой тип числа выбрать

Посмотри не только на числа во входе, но и на самые большие промежуточные значения и итоговый ответ. У языков здесь есть различие:

C++

int обычно хранит целые числа примерно до ±2,1 · 10⁹; long long — примерно до ±9 · 10¹⁸. Точный размер зависит от платформы.

double нужен для дробных вычислений.

Python 3

int не ограничен 32 или 64 битами: большие целые числа занимают больше памяти.

float используют для дробных вычислений. Как и double, он обычно хранит десятичные дроби с округлением.

При умножении: если в C++ записать int a = 100000;, выражение a * a переполнит int ещё до записи результата в long long. Используй 1LL * a * a. В Python a = 100000; result = a * a даёт целое число 10 000 000 000 без такого переполнения.

Деление и остаток

C++
5 / 2 → 25.0 / 2 → 2.517 % 5 → 2
Python 3
5 / 2 → 2.55 // 2 → 217 % 5 → 2

В C++ два целых операнда дают при делении целый результат. В Python оператор / возвращает дробное число, а // для положительных чисел отбрасывает дробную часть. При отрицательных числах правила округления этих языков различаются. Оператор % вычисляет остаток. Для double и float учитывай возможные ошибки округления.

Попробуй ввод и вывод

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

Вывод программыЗдесь появится результат.

Если автоматическая проверка на вашем сайте недоступна, пример выше показывает то же правило ввода.

Проверь себя

1. Что напечатают обе программы сложения, если числа 14 и 6 записаны на разных строках?

 

2. Пусть a = 100000. Как правильно получить a * a в обоих языках?

 

3. Что выведут C++: cout << 5 / 2; и Python: print(5 / 2)?

 

Ответы для самостоятельной проверки

1. 20 в обоих языках: наши примеры читают числа независимо от переноса строки. 2. В C++ 1LL * a * a, в Python a * a. 3. C++ выведет 2, Python — 2.5.

Практика на CSES · № 1094

Неубывающий массив

Оригинальное название: Increasing Array. Задачу можно решать на C++ или Python; понадобится цикл и работа с числами. В C++ проверь, уместится ли ответ в выбранный тип.

Дан массив из n целых чисел. За один ход можно увеличить любой один элемент на 1. Найдите минимальное число ходов, после которых массив станет неубывающим: каждый следующий элемент не меньше предыдущего.

Ввод

В первой строке число n. Во второй — n целых чисел xᵢ.

Вывод

Одно целое число: минимальное количество ходов.

  • 1 ≤ n ≤ 2 · 10⁵
  • 1 ≤ xᵢ ≤ 10⁹
  • Время: 1 с
  • Память: 512 МБ

Пример

Ввод
5
3 2 5 1 7
Вывод
5
Открыть и сдать на CSES ↗

Основа объяснения C++: Антти Лааксонен, «Олимпиадное программирование» (2018), глава 2, § 2.1.1–2.1.2. Сравнение с Python и задания для самопроверки составлены для этой страницы по документации Python ↗. Условие Increasing Array пересказано по-русски по оригиналу CSES ↗; лицензия сборника CC BY-NC-SA 4.0 ↗.

Категория: Algorithms | Добавил: bzfar77 (Вчера)
Просмотров: 8 | Теги: ввод и вывод, олимпиадное программирование, cin cout, cses 1094 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar