UVA problem nr 10055, „Hashmat the Brave Warrior”, chyba ich najłatwiejsze zadanie. Input składa się z par liczb w zakresie od 0 do 2^32 włącznie, więc może mieć sens użycie liczb 64bitowych. Dla każdej pary należy wypisać różnicę między większą a mniejszą z tych liczb.
Według ich statystyk najszybsze rozwiązania lecą w czasie poniżej 0.01 sek. Niestety wszystkie moje próby rozwiązania zadania zazwyczaj lecą w 0.02 sek, chyba losowo wahając się czasem w zakresie ± 0.01.sek.
Próbowałem:
#include <cstdint>
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
uint_fast64_t i, j;
while(cin >> i >> j) {
if(i > j)
cout << i-j << '\n';
else
cout << j-i << '\n';
}
}
A także:
#include <cstdlib>
#include <cstdint>
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int_fast64_t i, j;
while(cin >> i >> j) {
cout << abs(i-j) << '\n';
}
}
I jeszcze:
#include <algorithm>
#include <cstdint>
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
uint_fast64_t i, j;
while(cin >> i >> j) {
cout << max(i,j)-min(i,j) << '\n';
}
}
Ciągle z tym samym rezultatem.
Próbowałem też używać printf()
/scanf()
zamiast cin
/cout
, wciąż z tym samym rezultatem (skądinąd moje benchmarki wskazują, że cin
/cout
poprzedzony cin.tie(nullptr)
może być nawet nieco szybszy niż printf()
/scanf()
– przynajmniej o ile nie ma jakiś nieznanych mi sposobów na optymalizację cstdio
).
Czy jest jakiś sposób na ściągnięcie tego do czasu poniżej 0.01
sek., czy mam założyć że ci, którzy to osiągnęli, albo mieli nieprawdopodobnego farta albo są cziterami, którzy wypisują uprzednio wyliczoną odpowiedź na input sprawdzarki?
Programy są kompilowane z C++11 5.3.0 - GNU C++ Compiler with options: -lm -lcrypt -O2 -std=c++11 -pipe -DONLINE_JUDGE
.