Programming

[CF] Round #684 (Div. 2) _ 201117

minigb 2021. 4. 13. 13:16

(2020년 11월 20일에 작성한 글입니다.)

 

 

Dashboard - Codeforces Round #684 (Div. 2) - Codeforces

 

codeforces.com

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;
}