AtCoder Regular Contest 007
競技プログラミングって取り掛かるための活性化エネルギーみたいなものが睡眠の次ぐらいに低いと思う。時間をどんどん吸われて困る。
A - 帰ってきた器物損壊!高橋君
書くだけ。brainfuck向きの問題だった。
,
>,[-]
,+[-
[>+>+<<-]
<[>+>-<<-]
>[<+>-]
>[>.<[-]]
>[-]
<<,+
]
B - 迷子のCDケース
素直にsimulateすればよい。
#!/usr/bin/env python3
n, m = map(int,input().split())
a = list(range(n+1))
b = list(range(n+1))
for i in range(m):
disk = int(input())
a[0], a[b[disk]] = disk, a[0]
for i in [0, b[disk]]: b[a[i]] = i
for i in range(1,n+1):
print(a[i])
C - 節約生活
$N \le 10$なので、$O(N2^N)$で全て試せばよい。 見る範囲を短く取りすぎないように注意。2週目まで必要。
1WA生やした。oxxo
を2でなく3と出力させてしまっていた。
#include <iostream>
#include <deque>
#include <cassert>
#define repeat_from(i,m,n) for (int i = (m); (i) < (n); ++(i))
#define repeat(i,n) repeat_from(i,0,n)
using namespace std;
int main() {
string c; cin >> c;
int n = c.length();
assert (n <= 10);
int result = n;
repeat (s, 1<<n) {
int popcnt = __builtin_popcount(s);
if (popcnt < result) {
deque<bool> a(3*n-1);
repeat (i,2*n) if (s & (1<<(i%n))) {
repeat (j,n) if (c[j] == 'o') {
a[i+j] = true;
}
}
int l = 0;
repeat (i,3*n-1) {
if (a[i]) {
++ l;
if (n <= l) result = popcnt;
} else {
l = 0;
}
}
}
}
cout << result << endl;
return 0;
}