1837: 考试(New Online Judge)

文章介绍了一个编程问题,涉及如何在给定学生答案的情况下,设定题目答案以最大化最低分数。通过C++代码实现,通过枚举所有可能的答案组合来计算每个情况下答对最少题目的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1837: 考试(New Online Judge)

题目描述

n个学生正在参加一场考试,考试包含均为k道对错题,每道题值一分。
由于答案未知,你可以设定每道题的答案,要使得最低的分数尽可能的高。
你能达到的最低分数是多少?

输入

第一行为两个正整数n和k,1≤n≤1000,1≤k≤10。
接下来n行,每行包含k个字符,要么为T,要么为F,表示第i位同学的k道题的答案。

输出

输出一个数字表示答案。

样例输入

5 4
TFTF
TFFF
TFTT
TFFT
TFTF

样例输出

2

题解1(C++版本)

#include<bits/stdc++.h>
using namespace std;
 
int n, k;
char s[1010][15];
 
int main(){
    scanf("%d%d", &n, &k);
    getchar();
    for(int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
    int res = 0; //记录使得最低的分数尽可能高的题目数量 
    for(int t = 0; t < (1<<k); t++){  //枚举[0000,1111]共16种情况,0101表示第1题和第3题的答案是F ,第2题和第4题的答案是T 
        int curMinNum = k; //记录当前答案下,答对题目最少的数量 
        for(int i = 1; i <= n; i++){
            int rightNum = 0; //记录每位同学答对的题目数量 
            for(int j = 0; j < k; j++){
                if( ( (t&(1<<j)&& s[i][j + 1] == 'T') ) || ( (!(t&(1<<j)) && s[i][j + 1] == 'F') ) ){ //这题答案是T/F,并且这位同学的答案也是T/F 
                    rightNum++; 
                } 
            }
            curMinNum = min(curMinNum, rightNum);
        }
        res = max(res, curMinNum);
    }
    printf("%d\n", res);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值