QOJ.ac

QOJ

満点: 100 利用不可

#3392. 维度

統計

你和你的朋友 Christian 决定休假一年,环游世界去看看壮丽的风景,结识有趣的人,体验不同的文化。不幸的是,不同的文化带来了令人头疼的差异。工程师们所知的最困难的差异就是单位差异。为什么人们还在使用英里、firkin、微双周(microfortnights)、烛光、蒲式耳(boisseaux)、foe、品脱、千瓦时,更不用说摄氏度了,而他们本可以更快乐地使用标准且受人喜爱的国际单位制(SI)单位:米、千克、秒、安培、开尔文和坎德拉?

物理量 名称 符号
长度 m
质量 千克 kg
时间 s
电流 安培 A
温度 开尔文 K
发光强度 坎德拉 cd

表 1:国际单位制(SI)单位列表

事实上,你非常热爱 SI 单位,以至于拒绝使用任何其他单位。诸如焦耳(J)、牛顿(N)和欧姆($\Omega$)之类的导出单位可以完美地用其等效的 SI 单位表示,分别为 $\text{kg m}^2 / \text{s}^2$、$\text{kg m} / \text{s}^2$ 和 $\text{kg m}^2 / \text{s}^3 \text{A}^2$。因此,在旅行期间,你记录了遇到的所有单位及其定义。当然,有些定义依赖于其他定义,例如 $\text{Pa} = \text{N} / \text{m}^2$。

有了这些定义,你就不必再忍受诸如 $60 \text{ firkins} / \text{microfortnights}$ 或 $63 \text{ km} / \text{h}$ 之类的无稽之谈了,因为你总是可以将它们转换为 SI 单位。即使是像 $100 \text{ m} + 1.3 \text{ km}$ 和 $7 \text{ N} \cdot 8 \Omega$ 这样的计算对你来说也变得轻而易举。

输入格式

给出了以下语法('?' 表示“零个或一个”,'+' 表示“一个或多个”,'*' 表示“零个或多个”):

power ::= { 大于 1 的整数 }
unit ::= { 大小写英文字母 }+
dimension ::= unit ['^' power ]?
size ::= { 任意浮点数 } [' ' dimension]* ['/' [' ' dimension]+]?
operator ::= '+' OR '-' OR '*'
expression ::= size ' ' operator ' ' size
unit definition ::= unit '=' size

所有单位的长度均小于 10,且在同一个 size 中,单位不会重复。

输入的第一行包含一个整数 $U$,表示新单位的数量。 接下来是 $U$ 行,每行包含一个新单位的定义。在单位定义之后,有一行包含一个整数 $N$,随后是 $N$ 行,每行包含一个表达式或一个 size

在输入中,所有的 power 均小于 5,且所有的 unit 均为 SI 单位符号或先前定义的单位。

输出格式

对于每次计算,输出一行答案,即表达式或 size 本身转换为 SI 单位后的结果。如果无法计算答案,则输出 “Incompatible”(不含引号)。答案应格式化为 size,并遵循以下说明:

  • 单位可以按任意顺序书写,但必须保持在除号的正确一侧。
  • 如果单位的指数为 0,则不输出该单位;如果指数为 1,则不输出指数。
  • 在每个单位之间,以及单位与除号 / 之间,输出一个空格。
  • 在指数符号 ^ 前后不要输出任何空格。

数据范围

  • $0 < U \le 100$
  • $0 < N \le 1000$
  • 单位区分大小写。
  • 每行长度不超过 140 个字符。
  • 输入、输出或计算过程中的任何部分,其数值的绝对值均不超过 $10^{100}$。
  • 计算过程中的任何部分都不会出现除以 0 的情况。
  • 任何相对误差或绝对误差在 $10^{-6}$ 以内的输出均被接受。

样例

输入 1

4
km = 1000 m
h = 3600 s
J = 1 kg m^2 / s^2
X = 3 m^2 kg s / A K cd^4
4
100 m + 1.3 km
63 km / h
1E5 J * 0.003 h^2 / km^2
1 J - 2 X

输出 1

1400.0 m
17.5 m / s
3888.0 kg
Incompatible

またはファイルを一つずつアップロード:

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.