Помогите разобраться где может быть недоработка и каким образом можно ускорить работу кода?
#include
struct Student
{
char fam[20];
char name[20];
int howMOc = 0; //как много оценок(размер для массива *ocenki )
int* ocenki; //помещаем
double srBal = 0;
};
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
setlocale(0, "rus");
int howMStud = -1;
int howMSubj;
int pasScore = -1; //прох балл
cin >> howMStud;
if ((howMStud > 10000) || (howMStud < 1)) exit(0);
Student* postup = new Student[howMStud];
for (int i = 0; i < howMStud; i++)
{
cin >> postup[i].fam;
cin >> postup[i].name;
cin >> howMSubj;
if ((howMSubj > 50) || (howMSubj < 1)) exit(0);
postup[i].howMOc = howMSubj;
postup[i].ocenki = new int[howMSubj];
for (int j = 0; j < howMSubj; j++)
{
cin >> postup[i].ocenki[j];
postup[i].srBal += postup[i].ocenki[j];
}//for j
postup[i].srBal = postup[i].srBal / howMSubj;
}//for i
cin >> pasScore;
//Вывод
for (int i = 0; i < howMStud; i++)
{
if (postup[i].srBal >= pasScore)
{
cout << postup[i].fam << " " << postup[i].name;
cout << endl;
}//end if
}//end i
//system("pause");
return 0;
}
Ответ
Из того что я вижу в этом коде:
(WA) при вычислении среднего от 50: 10^9 10^9 ... 10^9 вы получите целочисленное переполнение, рекомендую использовать тип long long (у вас может и 64 бита но не факт что там так же).
(TL) работа с cin/cout оочень медленная. Есть разные способы исправить это, можете читать через scanf/printf, можно использовать магические строки
cout.tie(0);
iostream::sync_with_stdio(0);
рекомендую статью http://codeforces.com/blog/entry/5217?locale=ru (адаптация под олимпиады).
(WA/UB) размер строки 20 символов, но не 21 (а нуль символ?)
Отвыкайте использовать динамическую память на олимпиадах без реальной необходимости, лучше задать массив сразу размера 10.000 и всё. Больше не меньше.
(ML) не храните массив с оценками только само среднее значение, массив используйте общий для всех студентов.
Так код с виду рабочий.
Комментариев нет:
Отправить комментарий