#P2320. SHEET

SHEET

问题描述

检查电子表格是否有一致的公式定义。

电子表格的任意单元格可包含依赖其他单元格值的公式。在尝试计算单元格值之前,确定该单元格的公式定义是否存在循环至关重要。

我们的电子表格仅支持有限的表达式格式:

定义 := 单元格 "=" 表达式  
表达式 := 项  | 表达式 "+" 项 | 表达式 "-" 项  
项 := 因子 | 项 "*" 因子 | 项 "/" 因子  
因子 := 数字 | 单元格 | "(" 表达式 ")"  
数字 := 数字字符 | 数字数字字符  
数字字符 := "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"  
单元格 := "R" 数字字符数字字符 "C" 数字字符数字字符  

有效单元格的行和列均为1到20,因此电子表格共有400400个单元格。

输入

输入包含一行或多行,每行表示电子表格中定义的单元格。
注意:若某个单元格的表达式引用其他单元格,被引用单元格的内容必定已定义,且表达式中不含空白字符。

输出

对输入中定义的每个单元格(按输入顺序),输出一行结果。若计算该单元格会导致循环定义(直接或间接),则输出单元格名称后跟"circular";若可无循环地计算,则输出"ok"。

输入数据1

R01C01=1
R01C02=2
R01C03=R01C01+R01C02
R02C01=(R03C02+1)*R01C03
R03C02=R02C01

输出数据1

R01C01 ok
R01C02 ok
R01C03 ok
R02C01 circular
R03C02 circular

提示

说明
以下电子表格会产生两个循环结果:

R01C01=0*R01C01  
R02C01=R02C01-R02C01  

关键点:在判断循环性之前,不进行代数化简。

:若单元格引用了一个循环单元格,即使它未引用自身,该单元格是否被定义为循环?
:是的。