Ciekawe czy ktoś rozwiązał to zadanie innym językiem niż C?
Ja próbowałem w sposób zoptymalizowany w Swift i mam przekroczenie czasu:
import Foundation
var (p, q, x, y) = (Int(), Int(), Double(), Double())
while let c = Optional(getchar_unlocked()), c != EOF {
p = (p<<1) + (p<<3) + Int(c) - 48
while let c = Optional(getchar_unlocked()), c != 32 {
p = (p<<1) + (p<<3) + Int(c) - 48
}
while let c = Optional(getchar_unlocked()), c != 10 {
q = (q<<1) + (q<<3) + Int(c) - 48
}
(x, y) = (Double(p), Double(q))
print(String(format: "%.2f", round((1 + y/x) * (x + y) * 100) / 100))
(p, q, x, y) = (0, 0, 0, 0)
}
Swift namiętnie sprawdza zgodność typów - czy to może być główny powód jego opóźnień?
A może robię coś źle?
Jak by był zaktualizowany kompilator Swifta to powinno przejść takie coś:
while let p = readLine()?.split(separator: " ").compactMap({ Double($0)! }) ?? nil {
print(String(format: "%.2f", round((1 + p[1]/p[0]) * (p[0] + p[1]) * 100) / 100))
}
W C napisałem tak:
#include <stdio.h>
#include <math.h>
int main() {
long p = 0, q = 0;
while (scanf("%ld %ld", &p, &q) != EOF) {
printf("%.2lf\n", round((1 + (double)q/p) * (p + q) * 100) / 100);
p = (q = 0);
}
return 0;
}
Ale optymalniej okazało się tak:
#include <stdio.h>
#include <math.h>
int main() {
long p, q, c;
while ((c = getchar_unlocked()) != EOF) {
p = c - '0';
while ((c = getchar_unlocked()) != ' ') {
p = (p<<1) + (p<<3) + c - '0';
}
q = 0;
while ((c = getchar_unlocked()) != '\n') {
q = (q<<1) + (q<<3) + c - '0';
}
printf("%.2f\n", round((1 + (double)q/p) * (p + q) * 100) / 100);
}
return 0;
}
Prośba do mądrzejszych ode mnie - Co w tych kodach można byłoby dopracować?