你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

第六次热身赛---坤坤的考试(hard version)

2021-11-28 22:19:27

 题面如图所示。

该题与第五次周测的easy version大同小异,前者是进行字符串对比,直接得出答案,后者也就是本题是限制修改答案次数,求出修改后最大的分值。

对于相同答案的题目,我们可以直接把他的分值加上;对于不同答案的题目,我们用一个数组存下他的分值,在遍历完所有题目后,我们对他进行个排序,然后选出m个大分值的题加上去。

注意:开long long!!!

代码如下。

#include<bits/stdc++.h> 
typedef long long ll;
const ll mod = 1e9 + 7;
using namespace std;
int c[10010];
int main() {
	int n, m;
	cin >> n >> m;
	string a, b;
	cin >> a >> b; //C++的字符串,不会的同学可以用C的char
	int k = 0;
	ll sum = 0; // 注意开long long
	for (int i = 0; i < n; i++) {
		int x;
		cin >> x;
		if (a[i] != b[i]) { //如果答案错误,则把他的分值放入数组c中
			c[++k] = x;
		}
		else { //如果答案正确,则直接加上他的分值。
			sum += x;
		}
	}
	sort(c + 1, c + 1 + k); // 快排,没学的同学使用自己会的排序方法
	if (k < m) { // 如果错误答案数小于最大修改数,则说明所有的错误题目的分值均可加上去
		for (int i = k; i >= 1; i--) {
			sum += c[i];
		}
	}
	else { // 如果错误答案大于等于最大修改数,则把前m大的分值加上去
		for (int i = k; m > 0; m--, i--) {
			sum += c[i];
		}
	}
	cout << sum;
	return 0;
}