Ещё алгоритмическая хрень
Сегодня было выяснено:
1) Не делайте так: scanf(«%d», &t);
Вот так быстрее scanf(«%s», tmp); t = atoi(tmp);
2) Не делайте так:
for (i = 0; i < 10; i++)
scanf(«%s», tmp[i]);
Вот так быстрее:
scanf(«%s %s %s %s %s %s %s %s %s %s», tmp ….);
3) Если известно что число положительное и меньше 11 знаков (то бишь 10^9) то atoi(tmp) медленнее чем
int atoi2(const char *t)
{
int sum = 0;
int i = 0;
for (; i < 11; i++)
{
sum += (t[i]-‘0’);
if (t[i+1] == 0)
break;
sum = sum + sum + (sum << 3);
}
return sum;
}
А вообще вот задача: http://spoj.sphere.pl/problems/INTEST/
Мы там с Максом пока на первых местах, если решать в лоб без оптимизации приведенной выше то получается около 8 секунд. Удалось улучшить почти в 2 раза! Если есть ещё идеи то в комменты. =)
Ох, если б я чего-то в этом понимал :-))
Ну чуток опыта + книжки и все получиЦЦа =)