(2020년 11월 20일에 작성한 글입니다.)
A.
그대로 두거나
다 0으로 바꾸거나
다 1로 바꾸거나
셋 중 하나다
구현을 빠르고 정확하게 하는게 중요했다
뭔가 잘 안되서 시간을 좀 썼다...
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int T;
int N, C0, C1, H;
int ans = int_inf;
string s;
int i;
cin >> T;
while (T--) {
cin >> N >> C0 >> C1 >> H;
cin >> s;
vector<int> cnt(2, 0);
for (i = 0; i < N; i++) {
cnt[s[i] - '0']++;
}
ans = int_inf;
ans = min(ans, cnt[0] * C0 + cnt[1] * C1);
ans = min(ans, C0 * N + cnt[1] * H);
ans = min(ans, C1 * N + cnt[0] * H);
cout << ans << '\n';
}
return 0;
}
B.
주어진 수들이 오름차순으로 이미 정렬이 되 있으니까
뒤에서부터 앞으로 오면서 그룹을 지어주면 된다.
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int T;
int N, K;
int i;
cin >> T;
while (T--) {
cin >> N >> K;
vector<ll> arr(N * K);
for (i = 0; i < N * K; i++) {
cin >> arr[i];
}
ll sum = 0;
int cnt = 0;
for (i = N * K - 1 - N / 2; cnt < K && i >= 0; i -= (N / 2 + 1), cnt++) {
sum += arr[i];
}
cout << sum << '\n';
}
return 0;
}