Files
python/GESP/Level6/20240902.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

40 lines
1.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int m; // 算法种类数
int n; // 题目数
int k; // 目标掌握程度
int b[N]; // 代表每道题目已经取得的经验值
pair<int, int> a[N]; // 代表每道题目的frist:经验值,second:知识点
int c[N]; // 存储每个知识点选了多少道题
int cnt, ans, mx;
int main() {
cin >> m >> n >> k; // 输入算法种类数,题目数,目标掌握程度
for (int i = 1; i <= n; i++)
cin >> a[i].second; // 输入每道题目的知识点
for (int i = 1; i <= n; i++)
cin >> a[i].first; // 输入学习每道题目可以获取到的经验值
sort(a + 1, a + n + 1); // 按可以获取到的经验值最小到大排序
for (int i = n; i >= 1; i--) { // 倒序枚举,就是经验值最大到小
if (b[a[i].second] < k) { // 第a[i].second,也就是该知识点的已获得的经验值不够k
b[a[i].second] += a[i].first; // 这道题需要做一下,经验值增加
if (b[a[i].second] >= k)
cnt++; // 有多少个知识点达到了k
ans++; // 增加题数(记录使了多少个题目)
c[a[i].second]++; // 统计每个知识点的选择题数
mx = max(mx, c[a[i].second]); // 统计选择最多题的知识点选择了的题数
}
}
// ① 如果最终可以达标的算法数量不够m个表示无解
// ② 如果选择最多的题数大于题目总数的一半,表示无解
if (cnt < m || n < mx * 2 - 1)
cout << -1 << endl; // 输出-1
else
cout << max(mx * 2 - 1, ans) << endl; // 输出最大值
return 0;
}