#include <unistd.h>
#include <string.h>
#define IN_BUF (1 << 20)
#define OUT_BUF (1 << 20)
static inline int compute_exp(int N, int m10) {
int exp = 0;
int k = (m10 - 10) * 10; // pre-computed scale
while (N > 0) {
int green_cap = N * k;
int combined = N * (100 + k);
if (green_cap > 10000)
combined = N * 100 + 10000;
exp += combined / 10;
N >>= 1;
}
return exp;
}
static inline int read_int(const char** p) {
int v = 0;
while (**p < '0' ||** p > '9') (*p)++;
while (**p >= '0' &&** p <= '9') v = v * 10 + (*(*p)++ - '0');
return v;
}
int main() {
static char inbuf[IN_BUF], outbuf[OUT_BUF];
ssize_t len = read(0, inbuf, sizeof(inbuf));
const char* p = inbuf, *end = inbuf + len;
int T = read_int(&p), outlen = 0;
// stdin is the bottleneck
for (int t = 0; t < T && p < end; ++t) {
int N = read_int(&p);
int a = read_int(&p);
if (*p == '.') p++;
int b = (*p >= '0' && *p <= '9') ? *p++ - '0' : 0;
int m10 = a * 10 + b; // 1.5 → 15 to avoid floating/rounding
int ans = compute_exp(N, m10);
char tmp[16];
int i = 15;
tmp[i--] = '\n';
int v = ans;
do {
tmp[i--] = v % 10 + '0';
v /= 10;
} while (v);
int n = 15 - i;
if (outlen + n >= OUT_BUF) {
write(1, outbuf, outlen);
outlen = 0;
}
memcpy(outbuf + outlen, tmp + i + 1, n);
outlen += n;
}
if (outlen) write(1, outbuf, outlen);
return 0;
}

#牛客AI配图神器#