Добро пожаловать и удачи на раунде!
Напоминаю, что если у вас возникают вопросы по задачам, то лучше всего использовать веб-интерфейс их посылки со страницы задач.
Позже в этом же посте мы будет обсуждать прошедший раунд.
Желаю высокого рейтинга,
MikeMirzayanov.
1) Где(как) просмотреть исходный код своих отправок?
2) Ожидаются ли разборы задач и когда ожидать?
Спасибо.
Офигеть!
В решении у меня было такой код для считывания строк:
while (true) {
c=getc(stdin);
if (c=='\n' || c==EOF) {
a.push_back(str);
if (str.size()>lenmax) lenmax=str.size();
str="";
if (c==EOF) break;
} else str+=c;
}
Я получил WA1.
Переправил на:
while (getline(cin,str)) {
a.push_back(str);
if (str.size()>lenmax) lenmax=str.size();
}
Получил AC.
Я не понимаю, чем первый код по функциональности отличается от второго?
Сам сталкивался с подобной проблемной в частности на сподже.
Спасибо за сообщения.
Мда. Из-за такой тупости запороться.
Что еще раздражает, так это постоянные минусы за сообщения. Че за неадекваты их ставят?
у меня решение на С++ стабильно там падало (например, посылка 10770), а идентичное решение на Java (посылка 12492) прошло.
вообщем, смешно даже, слил контест из-за сложнейше задачи... наверное час А решал....)
int total = 0;
while( !feof( stdin ) )
{
char buf[ 2024];
gets( buf );
std::string str = buf;
if( str.empty() )
break;
if( str[0] == '+' )
{
std::string name = str.substr( 1 );
names.insert( name );
}
else if( str[0] == '-' )
{
std::string name = str.substr( 1 );
names.erase( name );
}
else
{
int p = str.find_first_of( ':' );
if( p == std::string::npos )
break;
total += (str.size() - p - 1) * names.size();
}
}
гетс иногда вообще не срабатывает и строка последняя дублируется...
вот фигня)
У меня решение почти такое же как и в E.
Будем решать при помощи ДП. Пусть d[i] - максимальная длина правильной скобочной последовательности, начинающейся с i-го символа строки. Пусть n - длина строки, тогда d[n]=0.
Если i-ая скобка ")" - то d[i]=0
Иначе, если i-ая скобка "(", а (i+1)-ая скобка ")" - то d[i]=2+d[i+2]
Если i-ая скобка "(", а (i+1)-ая скобка "(", то возможны два варианта:
1) Если (i+1+d[i+1])-ая скобка ")" - то ответ d[i]=2+d[i+1]+d[(i+1+d[i+1])+1]
2) Если (i+1+d[i+1])-ая скобка "(" - то d[i]=0.
Вот и все решение :)
Но C и за 5 и за 7 сдавали, а E точно так не сдашь (с учетом прочтения и продумывания).
А у меня решения почти идентичные в обоих задачах, вот и почувствовал, что перемудрил в С.
> SKYDOS писал:
> 1) Где(как) просмотреть исходный код своих отправок?
Актуальный вопрос!
представьте, какая происходит деморализация когда почти час не может сдать задачу А.... как тут решать все остальное)
while ( cin >> s ) // или while ( cin.getline(s) )
{
....
}
у меня работало что в A, что в B, что во всех аналогичных задачах.
Так что непонятно зачем здесь что-то еще придумывать, и рассматривать разные случаи.
while(gets(s))
обе за задачи A и B прошли без проблем.
Может из-за того, что я под MS VC отправлял.
а я просто не знал что gets может NULL возвращать, и думал что он как минимум '\0' в читаемый буфер запишет, если ничего не прочтет...
вот и стал паниковать)
просто, из условия задачи не ясно что такое строка входного файла.
1) это, может быть последовательность (возможно пустая) символов заканчивающаяся '\r' или '\n' или '\r\n'
по этому определению в тексте "\r\n" - одна пустая строка, а в тексте "test" - вообще ноль строк.
2) или же она может заканчиваться еще и концом файла, тогда в
"\r\n" - две пустые строки.
в задаче А пустые строки не допустимы по условию.
while( gets( s ) ) { }
будет работать как в случае если в конце последней строки есть перевод строки, так и если нету.
в целом фраза "Н строк" не обозначает ни наличия ни отсутствия перевода строки в конце. любому человеку мне кажется понятно, что файл с 20 непустыми строками, в конце последней из которых есть перевод - это файл именно с двадцатью строками, а не с 21-ой, верно?
и файл с 20-ю строками, в конце последней из которых нет перевода - это тоже файл с 20-ю строками.
Так что, казалось бы, надо просто выучить "while( gets( s ) )" :о)
Простейший пример того, что это правило удобно — склейка двух текстовых файлов. Если и в файле перевод строки не поставить, и при обработке не задуматься об этом, получится, что к последней строке первого файла приклеится первая строка второго.
Нельзя ли сделать как в Гугл, чтобы один раз авторизовался и всё?
Браузер Firefox, куки после выхода _не_ чищу.
Спасибо.
Для каждого числа i от 1 до n найти
- первый элемент от a[i] по часовой стрелке и больший его (пусть его номер равен L[i]), и
- первый элемент от a[i] против часовой стрелке и больший его (пусть его номер равен R[i]).
Тогда ответ на задачу равен сумме , где f(i)=0, если L[i] и R[i] не существуют, f(i)=1, если L[i]=R[i] и f(i)=2, если L[i] ≠ R[i].
Наверно, все скажут, что для различных чисел все намного проще решается, но от такого решения до полного всего пару несложных шагов.
Да, забыл сказать, что величины L[i] и R[i] могут быть найдены за линейное время алгоритмом очень похожим на КМП.
Без компиляции в техе, конечно, трудно уследить, что получится.
Поправьте, пожалуйста, слово "Отформотируйте" в условии к задаче "B. Выравнивание по центру".