본문 바로가기

Contest/SCPC

SCPC 2024 Round 1 코드

(7/6 20:40에 공개로 전환)

 

 

 

1. A보다 B가 좋아

 

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int n; string s; cin >> n >> s;
	int p = -9, ans = 0;
	for (int i = 0; i < n; i++) if (s[i] == 'A') {
		ans += max(3 + p - i, 0);
		p = i;
	}
	cout << ans << '\n';
}

int main()
{
	cin.tie(0)->sync_with_stdio(0);
	int tc; cin >> tc;
	for (int t = 1; t <= tc; t++) {
		cout << "Case #" << t << '\n';
		solve();
	}
}

 

 

2. 배달

 

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int n; cin >> n;
	vector<int> a(n + 1);
	for (int i = 1; i <= n; i++) cin >> a[i];
	sort(a.begin() + 1, a.end());
	int m = n / 4;
	long long ans = 0;
	for (int i = 1; i <= m; i++) ans -= a[i];
	for (int i = 0; i < m; i++) ans += a[n - i];
	cout << 2 * ans << '\n';
}

int main()
{
	cin.tie(0)->sync_with_stdio(0);
	int tc; cin >> tc;
	for (int t = 1; t <= tc; t++) {
		cout << "Case #" << t << '\n';
		solve();
	}
}

 

 

3. 보안망 점검

 

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int n; cin >> n;
	vector<vector<int>> ad(n + 1, vector<int>());
	for (int i = 0; i <= n; i++) {
		int u, v; cin >> u >> v;
		ad[u].push_back(v);
		ad[v].push_back(u);
	}
	int x = 0, y = 0;
	for (int i = 1; i <= n; i++) if (ad[i].size() > 2) {
		(x ? y : x) = i;
	}
	int p = x, u = 0;
	long long t = 1;
	for (auto &v : ad[x]) if (v ^ y) u = v;
	while (1) {
		int v = ad[u][0];
		if (v == p) v = ad[u][1];
		if (v == y) break;
		p = u, u = v, t++;
	}
	cout << t * (t + 1) / 2 + (n - t - 2) * (n - t - 1) / 2 << '\n';
}

int main()
{
	cin.tie(0)->sync_with_stdio(0);
	int tc; cin >> tc;
	for (int t = 1; t <= tc; t++) {
		cout << "Case #" << t << '\n';
		solve();
	}
}

 

 

4. 딱 맞게

 

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int n, l; cin >> n >> l;
	vector<int> a(n + 1), b(n + 1);
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) cin >> b[i];
	sort(a.begin() + 1, a.end());
	sort(b.begin() + 1, b.end());

	int mx = 0;
	for (int i = 1; i <= n; i++) mx = max(mx, abs(a[i] - b[i]));
	if (mx > l) return cout << -1 << '\n', void();

	multiset<int> st;
	for (int t = 0; t < 2; t++) {
		for (int i = 1, j = 1; i < n; i++) {
			for (; j < n; j++) {
				st.insert(abs(a[j + 1] - b[j]));
				if (max(abs(a[i] - b[j + 1]), *prev(st.end())) > l) {
					st.erase(st.find(abs(a[j + 1] - b[j])));
					break;
				}
			}
			if (i < j) {
				mx = max({mx, abs(a[i] - b[j]), *prev(st.end())});
				st.erase(st.find(abs(a[i + 1] - b[i])));
			}
			else j++;
		}
		swap(a, b);
	}
	cout << mx << '\n';
}

int main()
{
	cin.tie(0)->sync_with_stdio(0);
	int tc; cin >> tc;
	for (int t = 1; t <= tc; t++) {
		cout << "Case #" << t << '\n';
		solve();
	}
}

 

 

5. 스퀘어

 

#include <bits/stdc++.h>
using namespace std;

void solve()
{
	int n; cin >> n;
	vector<int> a(n + 1);
	for (int i = 1; i <= n; i++) cin >> a[i];
	int q; cin >> q;
	if (q > 100) {
		while (q--) cout << 0 << '\n';
		return;
	}
	while (q--) {
		int l, r; cin >> l >> r;
		map<long long, int> mp;
		for (int i = l; i <= r; i++) if (a[i] > 1) mp[a[i]]++;
		int ans = 0;
		while (mp.size()) {
			auto it = mp.begin();
			auto [k, v] = *it;
			int val = v / k;
			if (val) mp[k * k] += val;
			ans += val;
			mp.erase(it);
		}
		cout << ans << '\n';
	}
}

int main()
{
	cin.tie(0)->sync_with_stdio(0);
	int tc; cin >> tc;
	for (int t = 1; t <= tc; t++) {
		cout << "Case #" << t << '\n';
		solve();
	}
}

 

'Contest > SCPC' 카테고리의 다른 글

SCPC 2024 Round 2 코드  (0) 2024.07.27
SCPC 2023 본선 후기  (9) 2023.09.19
SCPC 2023 2차 예선 후기  (2) 2023.08.20
SCPC 2023 1차 예선 후기  (5) 2023.08.03