Страницы

Поиск по вопросам

вторник, 25 декабря 2018 г.

“Проходной балл” Как ускорить работу кода и устранить недоработку?

Помогите разобраться где может быть недоработка и каким образом можно ускорить работу кода?

#include #include #include using namespace std;
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) не храните массив с оценками только само среднее значение, массив используйте общий для всех студентов.
Так код с виду рабочий.

Комментариев нет:

Отправить комментарий