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
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
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';
}
}
자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !
틀린 부분은 감사히 지적받겠습니다.