自认为没有问题。
#include <bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int maxn = 5e5 + 1;
const int mul = 1e9;
const double eps = 0.8;
int n;
int a[maxn];
int d2[maxn], d5[maxn];
int b[41][41];
int ans;
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
double x;
cin >> x;
a[i] = x * mul + eps;
while (a[i] % 2 == 0) {
++d2[i];
a[i] /= 2;
}
while (a[i] % 5 == 0) {
++d5[i];
a[i] /= 5;
}
}
for (int s2 = 18; s2 <= 40; s2++) {
for (int s5 = 18; s5 <= 40; s5++) {
memset(b, 0, sizeof(b));
for (int i = 1; i <= n; i++) {
if (s2 - d2[i] >= 0 && s5 - d5[i] >= 0) ans += b[s2 - d2[i]][s5 - d5[i]];
b[d2[i]][d5[i]]++;
}
}
}
cout << ans;
return 0;
}