Erstens, wenn der linke Rand vertikal ist, gibt es 3 Möglichkeiten zum Malen. Wenn er horizontal ist, gibt es 6 Möglichkeiten mit 3 * 2. Wenn die Vertikale neben der Vertikalen liegt, sollte sie sich von der vorherigen vertikalen Farbe unterscheiden, also 2 Wenn die Horizontale neben die Vertikale kommt und Sie sich für die Oberseite entscheiden, gibt es zwei Möglichkeiten, da sie sich von der Vertikalen unterscheiden sollte. Auf der Unterseite gibt es nur eine andere Möglichkeit, also gibt es zwei Möglichkeiten. Horizontal Wenn die Vertikale neben die Horizontale kommt, gibt es nur einen Weg, da bereits zwei Farben festgelegt wurden. Wenn die Horizontale neben die Horizontale kommt, gibt es drei Möglichkeiten:
0022 0011 0011
1100 1100 1122
Alles was Sie tun müssen, ist es zu addieren.
N = int(input())
S1 = input()
S2 = input()
if S1[0] == S2[0]:
result = 3
else:
result = 6
x = 0
W = len(S1)
while x < W:
if S1[x] == S2[x]:
if x + 1 == W:
break
result *= 2
result %= 1000000007
x += 1
else:
if x + 2 == W:
break
if S1[x + 2] != S2[x + 2]:
result *= 3
result %= 1000000007
x += 2
print(result)
Es gibt keine Begrenzung für die minimale Bewegung. Gehen Sie also von links oben nach rechts, wenn Sie das Ende erreichen, gehen Sie nach links, wenn Sie das Ende erreichen, nach rechts und so weiter. Wenn es sich dann um eine ungerade Zahl handelt und Sie das Senden an das nächste Quadrat wiederholen, handelt es sich entweder um eine gerade Zahl oder nur um das letzte Quadrat um eine ungerade Zahl.
H, W = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(H)]
result = []
y = 0
while y < H:
x = 0
while x < W:
if a[y][x] % 2 == 1:
if x == W - 1:
if y == H - 1:
break
else:
result.append('%d %d %d %d' % (y + 1, x + 1, y + 2, x + 1))
a[y + 1][x] += 1
else:
result.append('%d %d %d %d' % (y + 1, x + 1, y + 1, x + 2))
a[y][x + 1] += 1
x += 1
if y == H - 1:
break
y += 1
x = W - 1
while x >= 0:
if a[y][x] % 2 == 1:
if x == 0:
if y == H - 1:
break
else:
result.append('%d %d %d %d' % (y + 1, x + 1, y + 2, x + 1))
a[y + 1][x] += 1
else:
result.append('%d %d %d %d' % (y + 1, x + 1, y + 1, x))
a[y][x - 1] += 1
x -= 1
y += 1
print(len(result))
print('\n'.join(result))
ABC096D - Five, Five Everywhere
Wenn Sie durch 5 teilen, können Sie die verbleibenden Primzahlen nach Bedarf in aufsteigender Reihenfolge anordnen. Jede Kombination ist ein Vielfaches von 5.
N = int(input())
result = []
sieve = [0] * (55555 + 1)
sieve[0] = -1
sieve[1] = -1
for i in range(2, 55555 + 1):
if sieve[i] != 0:
continue
if i % 5 == 1:
result.append(i)
if len(result) == N:
break
sieve[i] = i
for j in range(i * i, 55555 + 1, i):
if sieve[j] == 0:
sieve[j] = i
print(*result)
Die Farbkombination ist 30 </ sub> C 3 </ sub> = 4060, sodass Sie eine vollständige Suche durchführen können. Da jedoch N ≤ 500 ist, * O * (4060 × 500), wenn Sie dies ohne nachzudenken tun. 2 </ sup> ≒ 10 10 </ sup>) und TLE sind unvermeidlich. (I + j) Wenn Sie nach dem Rest von% 3 gruppieren und die Originalfarben zählen, * O * (4060) × 30 × 3 × 3,7 × 10 5), so ist es gelöst.
from itertools import permutations
N, C = map(int, input().split())
D = [list(map(int, input().split())) for _ in range(C)]
c = [list(map(int, input().split())) for _ in range(N)]
a = [[0] * C for _ in range(3)]
for y in range(N):
for x in range(N):
t = ((x + 1) + (y + 1)) % 3
a[t][c[y][x] - 1] += 1
result = float('inf')
for b in permutations(range(C), 3):
t = 0
for i in range(3):
for j in range(C):
t += a[i][j] * D[j][b[i]]
result = min(result, t)
print(result)
Ich hatte die Intuition, dass das Sortieren nach b während des Keyence Programming Contest 2020 B - Roboterarme schmerzhaft war. Es ist ein Planungsproblem. Danach sollte ich so viele Brücken wie nötig entfernen, aber zuerst habe ich die von Segment Tree entfernten Brücken aufgezeichnet und gelöst. Nun, * O * () Ich kann es mit N </ i> log N </ i> lösen.
N, M = map(int, input().split())
ab = [list(map(int, input().split())) for _ in range(M)]
ab.sort(key=lambda x: x[1])
result = 0
t = -1
for a, b in ab:
a, b = a - 1, b - 1
if a <= t < b:
continue
result += 1
t = b - 1
print(result)
Wenn Sie sich für das 1. und 2. Tier entscheiden, haben Sie danach 1 Wahl, und wenn Sie einen Fehler machen, wissen Sie, dass es am Ende einen Widerspruch gibt. Wenn Sie also das 1. und 2. Tier mit 4 Mustern der Runde S, W machen Gut. * O * (4 × 10 5 </ sup>), daher gibt es kein Problem hinsichtlich des Berechnungsbetrags.
from itertools import product
N = int(input())
s = input()
swap = {'S': 'W', 'W': 'S'}
for a, b in product('SW', repeat=2):
t = [None] * N
t[0] = a
t[1] = b
for i in range(1, N - 1):
if t[i] == 'S':
if s[i] == 'o':
t[i + 1] = t[i - 1]
elif s[i] == 'x':
t[i + 1] = swap[t[i - 1]]
elif t[i] == 'W':
if s[i] == 'o':
t[i + 1] = swap[t[i - 1]]
elif s[i] == 'x':
t[i + 1] = t[i - 1]
if t[N - 1] == 'S':
if s[N - 1] == 'o' and t[N - 2] != t[0]:
continue
elif s[N - 1] == 'x' and t[N - 2] == t[0]:
continue
elif t[N - 1] == 'W':
if s[N - 1] == 'o' and t[N - 2] == t[0]:
continue
elif s[N - 1] == 'x' and t[N - 2] != t[0]:
continue
if t[0] == 'S':
if s[0] == 'o' and t[N - 1] != t[1]:
continue
elif s[0] == 'x' and t[N - 1] == t[1]:
continue
elif t[0] == 'W':
if s[0] == 'o' and t[N - 1] == t[1]:
continue
elif s[0] == 'x' and t[N - 1] != t[1]:
continue
print(''.join(t))
exit()
print(-1)
Recommended Posts