PATレベルB-多肢選択問題

トピックの説明
多肢選択式の質問を修正するのは面倒です。この質問については、教師が多肢選択式の質問を修正するのに役立つプログラムを作成し、どの質問が最も間違っているかを指摘してください。

入力形式
最初の行に2つの正の整数NとMを入力します。これらは、それぞれ生徒の数と多肢選択式の質問の数です。
次にM行、各行は順番に1つの質問を与えます满分值 选项个数 正确选项个数 所有正确选项
最後のN行では、各行に生徒の回答が选中的选项个数 选项1 ……示され、各回答の形式は質問の順序で示されています。

注:この質問は、生徒の回答が合法であることを保証します。つまり、選択されたオプションの数が実際のオプションの数を超える状況はありません。

出力形式
各生徒のスコアは入力順に与えられ、各スコアは1行を占めます。
出力エラーの最後の行で最も多くのトピック错误次数编号(入力順に1から始まる番号が付けられた件名)。

  • パラレルがある場合は、番号の昇順で出力されます。数字はスペースで区切り、行の最初と最後に余分なスペースがあってはなりません。
  • すべての質問が正しければ、最後の行に出力されToo simpleます。

質問を判断するとき、正しい選択だけが質問のスコアを取得できることに注意してください。

入力例
3 4
2 3 4 AC
2 5 1 B
5 3 2 BC
ABDE 1 5 4
(2 AC)(2 BD)(2 AC)(3阿部)
(2 AC)(1、B)(2 AB)(4 abde)
(2 bd)(1 e)(2 bc)(4 abcd)

出力例
3
6
5
2 2 3 4

データ範囲
N≤1000、M≤100


回答:

解题思路:問題の嘘の難しさ读入を持ちます如何将学生的答案与标准答案进行匹配

  1. 读入:最初(読み込み、次に中間を処理し、学生的答案最後に);を読み込むことができます
  2. 匹配変換されている限り、それぞれif学生的答案标准答案あり、最終的a b ca b c dabcabcd
#include <iostream>
using namespace std;

const int N = 1010, M = 110;

int stu[N];
string answer[M];
int wrong[M], score[M];

int main()
{
    
    
	int n, m;
	cin >> n >> m;
	
	for (int i = 1; i <= m; i ++)
	{
    
    
		int total, True;
		cin >> score[i] >> total >> True;
		string s;
		while(True --)
		{
    
    
			char x;
			cin >> x;
			s += x;
		}
		answer[i] = s;
	}
	
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= m; j ++)
		{
    
    
		    char left;
		    cin >> left;
			int submit;
			cin >> submit;
			string s;
			while(submit --)
			{
    
    
			    char x;
				cin >> x;
				s += x;
			}
			char right;
			cin >> right;
			if(answer[j] == s) stu[i] += score[j];
			else wrong[j] ++; 
		}
		
	for (int i = 1; i <= n; i ++) cout << stu[i] << endl;
	
	int maxv = 0;
	for (int i = 1; i <= m; i ++)
		if(wrong[i] > maxv)	maxv = wrong[i];

	if(!maxv) cout << "Too simple" << endl;	
	else
	{
    
    
	    cout << maxv;	
	    for (int i = 1; i <= m; i ++)
		    if(wrong[i] == maxv) cout << ' ' << i;
	}
	
	return 0;	
}

おすすめ

転載: blog.csdn.net/weixin_46239370/article/details/113879945