# String# Greedy# Simulation

c680 - 電腦閱卷 1

🔗 前往 ZeroJudge 原題

題目描述

題目要求模擬電腦閱卷,計算學生的選擇題成績。給定標準答案和學生的答案卡,計算答對題數,並根據題數和總題數計算學生的總分。需要處理答案卡超出題數、不足題數以及空白題的情況。

解題思路

程式首先讀取標準答案的長度 ans 和標準答案字串 ac。然後讀取學生數量 q,對於每個學生,讀取學生的答案字串 t。計算學生答對的題數 s,只考慮標準答案和學生答案的前 min(ans, tl) 個字元,其中 tl 是學生答案的長度。如果學生答案的字元與標準答案的字元相同,則答對題數加一。最後,計算學生的總分,公式為 100/ans * s,並輸出結果。

複雜度分析

  • 時間複雜度: O(n*m),其中 n 是學生數量,m 是標準答案的長度。
  • 空間複雜度: O(m),主要用於儲存標準答案字串。

程式碼

#include <iostream>
using namespace std;
int main(){
	int ans,q;
	while(cin >> ans){
		char ac[ans];
		for(int i=0;i<ans;++i)
			cin >> ac[i];
		string t;
		cin >> q;
		while(q--){
			int s=0;
			cin >> t;
			int tl=t.length();
			tl=min(tl,ans);
			for(int i=0;i<tl;++i)
				if(ac[i]==t[i])
					++s;
			cout << 100/ans*s << "\n";
		}
	}
}

Discussion