#P9218. 「TAOI-1」Apollo

    ID: 10158 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>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 个十进制小数 a1…ana_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) 的最小值。

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

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

输入格式

第一行一个整数 nn。

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

输出格式

nn 行,每行一个整数,分别表示 i=1…ni = 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):ai≤10a_i \leq 10,n≤5n \leq 5,t≤10t \leq 10。
  • Subtask 2(15 points):ai≤10a_i \leq 10,n≤100n \leq 100,t≤1000t \leq 1000。
  • Subtask 3(20 points):n≤1722n \leq 1722。
  • Subtask 4(15 points):ai≤1a_i \leq 1。
  • Subtask 5(35 points):无特殊限制。

对于所有数据,0<ai<1090 \lt a_i \lt 10^9,1≤n≤1051 \leq n \leq 10^5,1≤t≤3×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.4514,f(c)=4f(c) = 4;
  • j=2j = 2:取 c=11.46c = 11.46,f(c)=2f(c) = 2;
  • j=3j = 3:取 c=11.2c = 11.2,f(c)=1f(c) = 1;
  • j=4j = 4:取 c=11.3c = 11.3,f(c)=1f(c) = 1;
  • j=5j = 5:取 c=11.47c = 11.47,f(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) 同样最小。