(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 |