Это конец.
Если первый день я считаю приемлемым, 200 баллов из 200 в первых двух задачах и 28 из 200 в последних двух, это нормально, потому что на решение последних двух я уделил место только частным случаям, то то, что произошло сегодня, не укладывается в моей голове.
Окей, 100 баллов за первую, её бы даже Денис решил. За вторую 2 балла. Потому что я ленивый идиот и не догадался проверить случаи неравенства количества блюд и сотрудников, а тестов, удовлетворявших моему решению, было всего 1 из 50.
За третью 22 балла, ничего не имею против, с геометрией я не слишком дружу.
За четвертую 25 баллов, тут я не знаю, что сыграло большую роль — моя жадность при выделении памяти или особенности компилятора.
Итак, мы имеем 3 строки по 50 символов в каждой, каждая записывается с новой строки.
Оказывается, компилятор считает, что код
for(i=0;i<n;i++)
{
fscanf(fin,"%s\n",&a[i].s);
printf("%i\n",strlen(a[i].s));
}
for(i=0;i<n;i++)
{
printf("%i\n",strlen(a[i].s));
}
таков, что в первом случае стоит выводить 50 50 50, а во втором — 150 100 50, потому что объявленный тип
typedef struct stroka
{
char s[50];
} stroka;
нужно было объявлять как
typedef struct stroka
{
char s[51];
} stroka;
дабы избежать проблем при переносе строки. Я пожадничал и не выделил лишний символ, полагая, что компилятор считывает только строку без символов переноса, а в условии сказано, что их длина не превышает 50. Правда, почему следующие строки записывались в предыдущее значение счётчика, пока что для меня загадка.
Из-за того, что в файле две строки оказались одинаковыми, а в файле было 100 строк, правильными оказались 98 ответов из 100, а это значит, что тест неправильный и -5 баллов.
Итого, недобор в 103 балла, и 377 вместо 480 из 800, и как следствие, прощание с надеждой стать хотя бы призёром, необязательно попадая на всерос.
У Коли пока что 537, и подозрительный недобор 5 баллов в 3 задаче 1-го тура, итого 542. У Вити 380, что тоже неплохо.
Ну а я кусок идиота. Блять. Ненавижу себя.