Главная > Программирование > Ещё алгоритмическая хрень

Ещё алгоритмическая хрень

Сегодня было выяснено:

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 раза! Если есть ещё идеи то в комменты. =)

  1. 10 ноября 2004 в 15:26 | #1

    Ох, если б я чего-то в этом понимал :-))

  1. Пока что нет уведомлений.