HM172 打印器调度
HM172 打印器调度
来源: 第 172 集 模板-普通函数与函数模板调用规则
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
普通函数和函数模板可以同名,构成重载。调用时按下面四条规则决定走哪一个:
- 普通函数与函数模板都能匹配时,**优先调用普通函数**。即使普通函数只有声明、没有定义,编译器仍会选它,链接阶段才会因找不到实现而失败;并不会自动退到模板。
- 若要强制走函数模板,写空的模板参数列表:
name<>(实参)。尖括号里不要写int、double等类型。 - 函数模板之间也可以重载(例如两参数版本与三参数版本)。
- 若函数模板能产生**更好的匹配**(例如实参是
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:10 与 20 既能走普通函数也能走两参模板,优先普通函数,得分 \(10+20=30\);空模板参数列表强制走模板,得分 \(10\times 20=200\);三参数只匹配重载模板,得分 \(10+20+100=130\);字符 A、B 的 ASCII 为 \(65\)、\(66\),走模板更好,得分 \(65\times 66=4290\)。总和 \(30+200+130+4290=4650\)。
信息
- ID
- 1171
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者