Algorithm/코드포스

Codeforces Round #757 (Div. 2) 1548 -> 1495

Edyy 2021. 11. 28. 08:52

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

 

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

 

codeforces.com

 !!!! 모든 답은 제 풀이일 뿐 정해가 아닐 수 있습니다 !!!!

 

 

A. Divan and a Store

Problem - A - Codeforces

 

Problem - A - Codeforces

 

codeforces.com

문제

 

n,l,r,k 가 주어진다. 수가 n개인 배열에서 l~r 달러 사이의 초콜릿을 사려하는데 총합 k원을 사고 싶어한다. 이때 최대로 살 수 있는 초콜릿의 수를 출력하는 문제

 

풀이

 

정렬 후 싼 초콜릿부터 최대로 산다.

 

 

코드

 

#include <bits/stdc++.h>
using namespace std;
long long a[101];
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int T;
	cin >> T;
	while (T--) {
		long long n,l,r,k;
 
		cin >> n >> l >> r >> k;
		for (int i = 0; i < n; i++)cin >> a[i];
		sort(a, a + n);
		long long sum = 0, ans = 0;
		for (int i = 0; i < n; i++) {
			if (a[i] < l)continue;
			if (a[i] > r)break;
			if (sum + a[i] <= k) {
				sum += a[i];
				ans++;
			}
			else break;
		}
		cout << ans << '\n';
	}
 
}

 

 

B. Divan and a New Project

Problem - B - Codeforces

 

Problem - B - Codeforces

 

codeforces.com

문제

 

n+1 개의 빌딩이 있다. 0번째 빌딩에서 i번째 빌딩을 a[i]만큼 방문하는데 2*abs(x[0]-x[i])만큼의 시간이 든다. 최소 시간으로 모두 방문하기 위해 각 빌딩의 좌표를 출력하는 문제

 

풀이

 

0번째 빌딩을 0 으로 놓고 , a[i]가 큰 순서대로 1, -1 , 2, -2 ..순으로 좌표를 채워 준다.

 

코드

 

#include <bits/stdc++.h>
using namespace std;
long long a[200001],ans[200001];
priority_queue<pair<long long, long long> > pq;
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		for (int i = 0; i < n; i++) {
			cin >> a[i];
			pq.push({ a[i],i });
		}
		long long sum = 0;
		long long l = -1, r = 1,cnt=0;
		while (!pq.empty()) {
			auto now = pq.top();
			pq.pop();
			if (cnt % 2) {
				ans[now.second] = l;
				sum += (2LL * -l * (now.first));
				l--;
			}
			else {
				ans[now.second] = r;
				sum += (2LL * r * (now.first));
				r++;
			}
			cnt++;
		}
		cout << sum << '\n';
		cout << 0 << ' ';
		for (int i = 0; i < n; i++)cout << ans[i] << ' ';
		cout << '\n';
	}
 
}

 

 

자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !

틀린 부분은 감사히 지적받겠습니다.