Cuber QQ 迎来了他在华师大的最后一次期末考试。由于情况特殊,这场考试改为线上进行。
这是为毕业班特别准备的一次期末考试,命题老师为了让各位考生顺利毕业,设计了如下考试规则:
期末考试试卷共 n (1≤n≤1000)道选择题,由单选题和多选题组成。每道题的选项个数可能不同,多选题保证至少有一个正确选项。考试允许多次提交(每次提交会提交整张试卷而不是某一道题),每次提交之后都会反馈每一道题是对是错(多选题当且仅当考生答案和标准答案完全一致时反馈”正确”)。
当然,命题老师也不会任由考生们躺着通过,因此他足足出了一千道题目!
Cuber QQ 这下彻底慌了,他想设计一个自动答题脚本,但是在开工前,他想请你帮忙完成一些准备工作。Cuber QQ 会给出所有题的题型和选项个数,请你求出,在最优策略下,至多多少次提交可以做对所有题。
输入格式
第一行输入一个整数 n (1≤n≤1000),表示题目个数。
接下来 n 行,每行包含一个字符 c (S 或者 M,S 表示该题为单选题,M 表示该题为多选题)和一个正整数 x (1≤x≤10),分别表示各题的题型和选项个数。
输出格式
输出一个正整数,表示在最优策略下,至多多少次提交可以做对所有题。
样例
Input
2 S 5 M 2
Output
5
输出试的次数最多的一个题的次数即可,因为同时也可以把其他题试出来。对于单选题的次数是x,多选题的话由排列组合知识可得为C(x, 1) + C(x, 2) + C(x, 3) +……C(x, x)=2 ^ x – 1,取最大即可。
#includeusing namespace std; int fpow(int a, int b) { int ans = 1; for(; b; b >>= 1) { if(b & 1) ans = ans * a; a= a * a; } return ans; } int main() { int n; cin >> n; getchar(); int ans = 1; for(int i = 1; i <= n; i++) { char c; int x; scanf("%c%d",&c, &x); getchar(); if(c == 'S') ans = max(ans, x); else { ans = max(ans, fpow(2, x - 1));; } } cout << ans; return 0; }