zoukankan      html  css  js  c++  java
  • EOJ Monthly 2020.7 B. 线上考试(排列组合)

    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,取最大即可。

    #include <bits/stdc++.h>
    using 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;
    }
  • 相关阅读:
    POJ 2251 Dungeon Master(bfs)
    POJ 3275 Catch That Cow(bfs)
    POJ 3984 迷宫问题(bfs+路径记录)
    POJ 3620 Avoid The Lakes
    ZOJ 2100 Seeding
    POJ 2245 Lotto
    HDU 1181 变形课
    dedecms网站栏目增加缩略图的方法-测试通过
    dedecms缩略图模糊终极完美解决办法
    dedecms 留言板中引用模板文件方法
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/13334803.html
Copyright © 2011-2022 走看看