公式
B - 奨学金選考 / Scholarship Selection 解説
by
B - 奨学金選考 / Scholarship Selection 解説
by
kyopro_friends
問題文の指示通り、順に実装していきましょう。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m, k;
cin >> n >> m >> k;
vector<int>t(m);
for(int i=0; i<m; i++) cin >> t[i];
vector<vector<int>>s(n, vector<int>(m));
for(int i=0; i<n; i++){
for(int j=0; j<m; j++) cin >> s[i][j];
}
vector<int>x;
for(int i=0; i<n; i++){
bool ok = true;
for(int j=0; j<m; j++){
if(s[i][j] < t[j]){
ok = false;
}
}
if(ok){
x.push_back(i);
}
}
if(x.size() <= k){
for(auto i: x){
cout << i+1 << endl;
}
return 0;
}
map<int,int>p;
vector<int>points;
for(auto i: x){
int pi = 0;
for(int j=0; j<m; j++){
pi += s[i][j];
}
p[i] = pi;
points.push_back(pi);
}
sort(points.rbegin(), points.rend());
int b = points[k-1];
for(auto[i, v]: p){
if(v >= b){
cout << i+1 << endl;
}
}
}
実装例 (Python)
N, M, K = map(int, input().split())
T = list(map(int, input().split()))
S = []
for _ in range(N):
si = list(map(int, input().split()))
S.append(si)
X = []
for i, si in enumerate(S):
if all (sij >= tj for sij, tj in zip(si, T)):
X.append(i)
if len(X) <= K:
for i in X:
print(i+1)
exit()
P = {}
for i in X:
pi = sum(sij for sij in S[i])
P[i] = pi
B = sorted(P.values())[-K]
for i, v in sorted(P.items()):
if v >= B:
print(i+1)
投稿日時:
最終更新:
