#P0901. 三维评分表

三维评分表

题目背景

训练营里有一张三维评分表。每次查询会给出三个整数 x,y,zx,y,z,系统按照固定规则查出对应的评分值。

如果直接按规则一层层展开计算,同一个状态会被反复查询很多次,所以需要把已经算过的结果保存下来。

题目描述

记查询结果为 w(x,y,z)w(x,y,z),它的规则如下,并且必须按照从上到下的顺序判断:

  • 如果 x≤0x \le 0 或 y≤0y \le 0 或 z≤0z \le 0,则 w(x,y,z)=1w(x,y,z)=1;
  • 否则如果 x>22x>22 或 y>22y>22 或 z>22z>22,则 w(x,y,z)=w(22,22,22)w(x,y,z)=w(22,22,22);
  • 否则如果 x<yx<y 且 y<zy<z,则
w(x,y,z)=w(x,y,z−1)+w(x,y−1,z−1)−w(x,y−1,z)w(x,y,z)=w(x,y,z-1)+w(x,y-1,z-1)-w(x,y-1,z)
  • 否则,
$$w(x,y,z)=w(x-1,y,z)+w(x-1,y-1,z)+w(x-1,y,z-1)-w(x-1,y-1,z-1)$$

例如 w(30,−1,0)w(30,-1,0) 同时涉及大于 2222 和不大于 00 的情况,但因为第一条规则排在最前面,所以结果为 11。

请对输入中的每一组查询输出对应结果。

输入格式

输入包含多组查询。

每组查询包含三个整数 x,y,zx,y,z。

当读入 -1 -1 -1 时表示输入结束,这一行不需要计算。

输出格式

对于每组查询,输出一行,格式为:

w(x, y, z) = result

其中 x,y,zx,y,z 为原输入中的三个整数,result 为对应的查询结果。注意逗号、等号两侧的空格。

样例

25 -1 -1
1 1 1
-1 -1 -1
w(25, -1, -1) = 1
w(1, 1, 1) = 2

提示

w(x,y,z)=w(x,y,z-1)+w(x,y-1,z-1)-w(x,y-1,z)

w(x,y,z)=w(x-1,y,z)+w(x-1,y-1,z)+w(x-1,y,z-1)-w(x-1,y-1,z-1)

数据范围

对于 30%30\% 的数据,保证输入的行数不大于 55,并且 −109≤x,y,z≤5-10^9 \le x,y,z \le 5。

对于 100%100\% 的数据,保证输入的行数不大于 10001000,并且 −109≤x,y,z≤109-10^9 \le x,y,z \le 10^9。