Programming

[CF] Round #695 (Div. 2) _ 210108

minigb 2021. 4. 13. 23:45

(2021년 1월 9일에 작성한 글입니다.)

 

 

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

 

codeforces.com

 

A.

처음에는 9876543210987... 이렇게 출력하는 건 줄 알았다

근데 웃긴건 내가 잘못 해서

첫 번째 제출에 if(num == 0) num = 9;

이렇게 해서 9876543219876... 이렇게 출력되게 됐고

이거 때문에 틀린 줄 알고 수정해서 다시 냈는데 또 틀렸다.

그래서 생각해보니까...

앞에서 두 번째 숫자가 8이 될 때 break 해서

9890123456789012345...

이렇게 되는게 최대다..

깨닫는데 시간이 좀 걸렸다

다 비슷한 상황이었다...ㅎ

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int TC;

	cin >> TC;
	while (TC--) {
		int N;
		int num;
		string s = "989";
		int i;

		cin >> N;
		if (N <= 3) {
			for (i = 0; i < N; i++) {
				cout << s[i];
			}
			cout << ENDL;
			continue;
		}
		
		num = 0;
		cout << 989;
		for (i = 3; i < N; i++) {
			cout << num;
			num++;
			if (num == 10) {
				num = 0;
			}
		}

		cout << ENDL;
	}

	return 0;
}

C.

이건 종료 후에 풀었는데

아이디어를 떠올리기가 쉽지 않다.

서로 더하고 하다 보면

값 * 2배만큼 sum에서 빠지게 되는 수가 생길수밖에 없다.

그래서 그 수가 뭐가 될것인가가 문제인데

1) 빼는 수가 두 줄에서 하나씩 나오는 경우

a/b, a/c, b/c 이렇게 둘 씩 묶어서 각각의 최솟값의 합의 두 배를 빼면 된다.

ex. 7 5 4 / 2 9 / 7 1 -> sum = 35, 최소는 2 + 1 -> 답은 35 - 2 * (2 + 1) = 29

2) 빼는 수를 한 줄에서만 뽑는 경우

a, b, c 중 하나를 모두 빼면 됨

ex. 1 2 3 / 10 / 20 -> sum = 36, 첫 번째 줄을 모두 빼면 -> 답은 36 - 2 * (1 + 2 + 3) = 24

1)의 경우에는

수들을 다 정리한 다음에 둘을 합칠 수 있기 때문에 가능하지만

2)의 경우에는 한 줄만 남긴 후에 서로서로 합치도록 할 수 없기 때문에

한 줄에서만 빼기로 했다면, 그 줄은 모두 빠질 수 밖에 없다.

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int N[3];
	vector<vector<ll>> arr(3);
	ll sum[3] = { 0 }, minus = LLONG_MAX;
	int i, j;

	for (i = 0; i < 3; i++) {
		cin >> N[i];
		arr[i].resize(N[i] + 5);
	}
	for (i = 0; i < 3; i++) {
		for (j = 0; j < N[i]; j++) {
			cin >> arr[i][j];
			sum[i] += arr[i][j];
		}
		sort(arr[i].begin(), arr[i].begin() + N[i]);
	}

	for (i = 0; i < 3; i++) {
		minus = min(minus, sum[i]);
	}
	minus = min(minus, arr[0][0] + arr[1][0]);
	minus = min(minus, arr[1][0] + arr[2][0]);
	minus = min(minus, arr[0][0] + arr[2][0]);

	cout << sum[0] + sum[1] + sum[2] - 2 * minus << ENDL;

	return 0;
}