luogu#P9218. 「TAOI-1」Apollo

    ID: 13200 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>O2优化深度优先搜索,DFS最近公共祖先,LCA进制字典树,Trie单调栈

「TAOI-1」Apollo

题目背景

Execution.

这题原来叫 std::cout << std::fixed << std::setprecision(1) << 6.5 << '\n';

[被当事人删掉的图片.jpg]

【Upd 2023/04/15 21:42】添加了一组 Hack 数据位于 Subtask 2,#13。现在所有赛时的 50\bm{50} 分提交理论上均只能获得 30\bm{30} 分。

题目描述

给出 nn 个十进制小数 a1ana_1 \dots a_n

对于一个 aa,定义其精度 f(a)f(a) 表示最小的非负整数 kk 使得 10k×a10^k\times a 为整数;对于整数 aa,定义 f(a)=0f(a) = 0。对于两个十进制小数 a,ba, b,定义 g(a,b)g(a, b) 为对于所有 c[min(a,b),max(a,b)]c \in [\min(a,b), \max(a,b)]f(c)f(c) 的最小值。

对于所有 1in1 \leq i \leq n,你需要求出 j=1ng(ai,aj)\sum\limits_{j=1}^ng(a_i, a_j) 的值并输出。

定义十进制小数是一个含有整数部分和小数部分的数,其小数部分不为 00。之所以描述得这么愚蠢是因为保证输入的每个数都有小数点,但是好像无论什么写法都会有人提出不满,真是抱歉了。所以还是得看看被当事人删掉的图片。所以我在这里写闲话有人看得到吗。

输入格式

第一行一个整数 nn

接下来 nn 行,每行一个十进制小数 aia_i

输出格式

nn 行,每行一个整数,分别表示 i=1ni = 1 \dots n 对应的答案。

5
11.4514
11.4778
11.1338
11.1236
11.4789
10
11
9
9
11
8
1.1145
1.114
1.1145
1.514
1.19198
1.1154
1.114
1.1145
24
21
24
10
18
22
21
24

提示

数据范围

本题采用捆绑测试。

i=1nf(ai)=t\sum\limits_{i=1}^n f(a_i) = t

  • Subtask 1(15 points):ai10a_i \leq 10n5n \leq 5t10t \leq 10
  • Subtask 2(15 points):ai10a_i \leq 10n100n \leq 100t1000t \leq 1000
  • Subtask 3(20 points):n1722n \leq 1722
  • Subtask 4(15 points):ai1a_i \leq 1
  • Subtask 5(35 points):无特殊限制。

对于所有数据,0<ai<1090 \lt a_i \lt 10^91n1051 \leq n \leq 10^51t3×1061 \leq t \leq 3 \times 10^6保证 ai\bm{a_i} 没有后导 0\color{black}\bm 0,不保证 ai\bm{a_i} 互不相同

样例解释

i=1i = 1 为例:

  • j=1j = 1:取 c=11.4514c = 11.4514f(c)=4f(c) = 4
  • j=2j = 2:取 c=11.46c = 11.46f(c)=2f(c) = 2
  • j=3j = 3:取 c=11.2c = 11.2f(c)=1f(c) = 1
  • j=4j = 4:取 c=11.3c = 11.3f(c)=1f(c) = 1
  • j=5j = 5:取 c=11.47c = 11.47f(c)=2f(c) = 2

故 $\sum\limits_{j=1}^n g(a_1, a_j) = 4 + 2 + 1 + 1 + 2 = 10$。对于同一个 jj,上文给出的所有 cc,都可能有其它的不同的 cc 满足 f(c)f(c) 同样最小。