Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2010, 17:02   #21
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
#include <iostream>
#include <fstream>
#include <cctype>

typedef std:air<char, char> IntervalType;
typedef std:air<int, int> Fraction;

struct Interval
{
IntervalType itype;
Fraction left;
Fraction right;
};

int readUInt(const std::string &str, int &i)
{
int result = 0;
while (isdigit(str[i]))
result = result*10 + str[i++] - '0';
return result;
}

Fraction readFraction(const std::string &str, int &i)
{
Fraction result = std::make_pair(1.0, 1.0);

if (str[i] == '-') {
result.first = -1.0;
++i;
}

result.first *= readUInt(str, i);
if (str[i] == '/')
result.second = readUInt(str, ++i);

return result;
}

Interval toInterval(const std::string &str)
{
Interval result;
result.itype = std::make_pair(str.at(0),
str.at(str.length()-1));
int i = 1;
result.left = readFraction(str, i);
i += 2;
result.right = readFraction(str, i);

return result;
}

int intCount(const Interval &i)
{
int a = static_cast<int>(1.0 * i.left.first / i.left.second);
bool isInta = i.left.first % i.left.second == 0;
if (i.itype.first == '[' && isInta)
--a;
if (i.left.first < 0 && !isInta)
--a;

int b = static_cast<int>(1.0 * i.right.first / i.right.second);
bool isIntb = i.right.first % i.right.second == 0;
if (i.itype.second == ')' && isIntb)
--b;
if (i.right.first < 0 && !isIntb)
--b;

return b - a;
}

int main()
{
std::ifstream fin("input.txt");
std:fstream fout("output.txt");

std::string expr;
std::getline(fin, expr);
while (!fin.eof() && expr.length() != 0) {
Interval i = toInterval(expr);
fout << intCount(i) << std::endl;
std::getline(fin, expr);
}

fin.close();
fout.close();

return 0;
}
М-да, STL, несколько ф-ий...
Это задача в 20 строк кода!
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 05.11.2010, 17:18   #22
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
М-да, STL, несколько ф-ий...
Это задача в 20 строк кода!
Вы против использования STL и разбиения кода на функции?
С каких пор все началось измеряться в числе строк кода?
Оставьте intCount - вот вам те 20 строк. Остальное - всего лишь работа с файлами и LL(1)-разбор.
still_alive вне форума Ответить с цитированием
Старый 05.11.2010, 19:09   #23
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Вы против использования STL и разбиения кода на функции?
В олимпиадных задачах в большом количестве STL не приветствуется. Тут она просто не нужна. Все это только усложняет код и жрет время.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Syuf; 05.11.2010 в 19:54.
Syuf вне форума Ответить с цитированием
Старый 05.11.2010, 19:09   #24
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Вы против использования STL и разбиения кода на функции?
В олимпиадных задачах в большом количестве STL не приветствуется. Тут она просто не нужна. Все это только усложняет код и жрет время.
Опять форум...
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Syuf; 05.11.2010 в 19:54.
Syuf вне форума Ответить с цитированием
Старый 05.11.2010, 21:54   #25
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
В олимпиадных задачах в большом количестве STL не приветствуется. Тут она просто не нужна. Все это только усложняет код и жрет время.
В школьных - возможно, и то только в целях насильственного обучения) Однако на TopCoder STL только приветствуется.

Код наоборот становится читабельней. По крайней мере, для тех, кто с STL знаком

А эффективность... Подавляющее большинство алгоритмов STL будут работать быстрее, нежели написанные нами.

Почему не решают на асме? Потому что это долго писать и отлаживать. Почему решают на С++? Потому что разработка быстрее и отладка удобнее. Зачем использовать STL? По той же причине.
still_alive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Промежутки boomeer Помощь студентам 2 03.11.2010 09:02
Промежутки между ячейками (td) таблицы _PROGRAMM_ HTML и CSS 4 10.01.2010 22:59
Промежутки времени SatiriK(rus) SQL, базы данных 4 19.11.2008 00:37