Добро пожаловать и удачи на раунде!
Напоминаю, что если у вас возникают вопросы по задачам, то лучше всего использовать веб-интерфейс их посылки со страницы задач.
Позже в этом же посте мы будет обсуждать прошедший раунд.
Желаю высокого рейтинга,
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]).
Тогда ответ на задачу равен сумме
Наверно, все скажут, что для различных чисел все намного проще решается, но от такого решения до полного всего пару несложных шагов.
Да, забыл сказать, что величины L[i] и R[i] могут быть найдены за линейное время алгоритмом очень похожим на КМП.
Без компиляции в техе, конечно, трудно уследить, что получится.