硬貨の問題
const int v[6] = {1, 5, 10, 50, 100, 500};
int c[6];
int A;
void solve() {
int ans = 0;
for (int i = 5; i >= 0; --i) {
int t = min(A / v[i], c[i]);
A -= t * v[i];
ans += t;
}
printf("%d\n", ans);
}
区間スケジューリング問題
const int MAX_N = 100000;
int N, s[MAX_N], t[MAX_N];
pair<int, int> itv[MAX_N];
void solve() {
for (int i = 0; i < N; ++i) {
itv[i].first = t[i];
itv[i].second = s[i];
}
sort(itv, itv + N);
int ans = 0;
int t = 0;
for (int i = 0; i < N; ++i) {
if (t < itv[i].second) {
t = itv[i].first;
ans++;
}
}
printf("%d\n", ans);
}
Best Cow Line
int N;
char s[100000];
void solve() {
cin >> N;
for (int i = 0; i < N; ++i) {
cin >> s[i];
}
int a = 0, b = N - 1;
while (a <= b) {
//左からと右からを比較
bool left = false;
for (int i = 0; a + i <= b; ++i) {
if (s[a + i] < s[b - i]) {
left = true;
break;
} else if (s[a + i] > s[b - i]) {
left = false;
break;
}
}
if (left) {
putchar(s[a++]);
} else {
putchar(s[b--]);
}
}
putchar('\n');
}
Saruman’s Army
int n, r;
int x[1010];
void solve() {
cin >> n >> r;
for (int i = 0; i < n; ++i) {
cin >> x[i];
}
sort(x, x + n);
int i = 0, ans = 0;
while (i < n) {
int s = x[i++];
while (i < n && x[i] <= s + r) {
i++;
}
int p = x[i - 1];
while (i < n && x[i] <= p + r) {
i++;
}
ans++;
}
printf("%d\n", ans);
}
Fence Repair
int n, l[50010];
void solve() {
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> l[i];
}
LL ans = 0;
while (n > 1) {
int mii1 = 0, mii2 = 1;
if (l[mii1] > l[mii2]) {
swap(mii1, mii2);
}
for (int i = 2; i < n; ++i) {
if (l[i] < l[mii1]) {
mii2 = mii1;
mii1 = i;
} else if (l[i] < l[mii2]) {
mii2 = i;
}
}
int t = l[mii1] + l[mii2];
ans += t;
if (mii1 == n - 1) {
swap(mii1, mii2);
}
l[mii1] = t;
l[mii2] = l[n - 1];
n--;
}
printf("%lld\n", ans);
}