Problem:
Score : 300 points

Problem Statement

You are given N real values A_1, A_2, \ldots, A_N.
Compute the number of pairs of indices (i, j)
such that i < j and the product A_i \cdot A_j is integer.

Constraints

2 \leq N \leq 200\,000

0 < A_i < 10^4

A_i is given with at most 9 digits after the decimal.

Input

Input is given from Standard Input in the following format.

N
A_1
A_2
\vdots
A_N

Output

Print the number of pairs with integer product A_i \cdot A_j (and i < j).

Sample Input 1

5
7.5
2.4
17.000000001
17
16.000000000

Sample Output 1

3

There are 3 pairs with integer product:

7.5 \cdot 2.4 = 18

7.5 \cdot 16 = 120

17 \cdot 16 = 272

Sample Input 2

11
0.9
1
1
1.25
2.30000
5
70
0.000000001
9999.999999999
0.999999999
1.000000001

Sample Output 2

8

Solution in C (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <stdio.h>

int main(){
   int n,i,j,k[10000];
   double d;
   long x,xx,y,yy,t,ans,a[200000],b[200000];

   scanf("%d",&n);
   for (i=0;i<10000;i++) k[i]=0;
   for (j=i=0;i<n;i++) {
      scanf("%lf",&d);
      yy=y=1000000000;xx=x=d*y;
      while ((t=x%y)>0) {
         x=y;y=t;
      }
      if (yy/y>=10000) continue;
      a[j]=xx/y;b[j]=yy/y;
     k[((a[j]%b[j])*10000)/b[j]]++;
      j++;
   }
   n=j;
   ans=0;
   for (i=0;i<n;i++)
      for (j=1;j<10000;j++)
         if (k[j]>0 && (a[i]*j)%(b[i]*10000)==0) {
           ans+=k[j];
         }
   if (k[0]>1) ans+=k[0]*(k[0]-1)/2;
   printf("%ld\n",ans);
   return 0;
}