https://atcoder.jp/contests/agc047/tasks/agc047_a
Título
Ingrese n números de punto flotante hasta 9 posiciones decimales y calcule cuántos productos logarítmicos resultan ser "enteros".
Ideas
De hecho, solo mire el número de factores de cada número 2 y 5, y la suma es mayor que el denominador.
Todos los números se pueden contar por factores de 2 y 5, por lo que la escala será pequeña (menos de 15 * 15)
.
Código
void solve(int kaseId = -1) {
int n;
cin >> n;
map<pair<int, int>, int> cnt;
for (int i = 1; i <= n; ++i) {
long double ai;
cin >> ai;
ll val = (ll) (ai * 1000000000.0 + 0.5);
ll cnt2 = 0;
ll cnt5 = 0;
while (val % 2 == 0) {
cnt2++;
val /= 2;
}
while (val % 5 == 0) {
cnt5++;
val /= 5;
}
cnt[make_pair(cnt2, cnt5)]++;
}
ll ans = 0;
for (const auto &pi: cnt) {
for (const auto &pj: cnt) {
if (pi.first.first + pj.first.first >= 18 &&
pi.first.second + pj.first.second >= 18) {
if (pi == pj) {
ans += pi.second * (pi.second - 1ll);
} else {
ans += pi.second * 1ll * pj.second;
}
}
}
}
// debug(cnt);
cout << ans / 2 << endl;
}
posdata
Resulta que las preguntas de inicio de sesión son muy difíciles. Perdóneme.