HM172 打印器调度

HM172 打印器调度

HM172 打印器调度

来源: 第 172 集 模板-普通函数与函数模板调用规则

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

普通函数和函数模板可以同名,构成重载。调用时按下面四条规则决定走哪一个:

  1. 普通函数与函数模板都能匹配时,**优先调用普通函数**。即使普通函数只有声明、没有定义,编译器仍会选它,链接阶段才会因找不到实现而失败;并不会自动退到模板。
  2. 若要强制走函数模板,写空的模板参数列表:name<>(实参)。尖括号里不要写 intdouble 等类型。
  3. 函数模板之间也可以重载(例如两参数版本与三参数版本)。
  4. 若函数模板能产生**更好的匹配**(例如实参是 char,走模板只需推导 T,而走 int 版普通函数还要隐式转换),则优先调用函数模板。

实际开发中一般不要同时提供普通函数和同名函数模板,以免产生二义性。本题为了练规则,必须三套同时提供。

请实现:

  • 普通函数 dispatch(int a, int b):标记 N,得分 \(a+b\)。
  • 函数模板 dispatch(T a, T b):标记 T,得分 \(a \times b\)(char 按 ASCII 码参与运算)。
  • 重载函数模板 dispatch(T a, T b, T c):标记 R,得分 \(a+b+c\)(char 按 ASCII 码)。

读入 \(q\) 次调用,按调用写法真正去调上述函数(不要按操作编号手写分支冒充):

  • 操作 \(0\):两个整数,写成 dispatch(a, b)(规则 1)。
  • 操作 \(1\):两个整数,写成 dispatch<>(a, b)(规则 2)。
  • 操作 \(2\):三个整数,写成 dispatch(a, b, c)(规则 3)。
  • 操作 \(3\):两个字符,写成 dispatch(x, y)(规则 4)。

每次输出一行标记和得分,最后再输出所有得分之和。

输入格式

第一行一个整数 \(q\)(\(1 \le q \le 1000\))。

接下来 \(q\) 行,每行一种操作:

  • 0 a b:\(a, b\) 为整数,\(\lvert a\rvert, \lvert b\rvert \le 10^4\)。
  • 1 a b:同上。
  • 2 a b c:\(a, b, c\) 为整数,绝对值均 \(\le 10^4\)。
  • 3 x y:\(x, y\) 为可见非空白字符。

输出格式

先输出 \(q\) 行,每行:标记、一个空格、得分。

最后一行输出一个整数,表示 \(q\) 次得分之和。

样例

输入 #1

4
0 10 20
1 10 20
2 10 20 100
3 A B

输出 #1

N 30
T 200
R 130
T 4290
4650

输入 #2

2
0 -1 5
3 a a

输出 #2

N 4
T 9409
9413

说明

样例 1:1020 既能走普通函数也能走两参模板,优先普通函数,得分 \(10+20=30\);空模板参数列表强制走模板,得分 \(10\times 20=200\);三参数只匹配重载模板,得分 \(10+20+100=130\);字符 AB 的 ASCII 为 \(65\)、\(66\),走模板更好,得分 \(65\times 66=4290\)。总和 \(30+200+130+4290=4650\)。

信息

ID
1171
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者