[12번째 Contest]
방학 안에 100개의 콘테스트에 참가할 수 있을까..?
대회 준비로 코포에 집중을 못하고 있다. 이전에 1일 1버추얼 돌리다가 그린까지 떨어지는 대참사를 겪었기에 버추얼을 함부로 못하겠다..
오늘 코포는 AB가 굉장히 쉬웠는데, C가 C답지 않게 어려웠다.
이 주어진다. 우리는 다음 수식을 만족하는 를 결정해야 한다.
이 홀수면, 조건을 만족하는 정답은 없다.
이건 에 홀수, 짝수를 잘 조합해보면 바로 알 수 있다.
를 으로 고정시키고 풀면 간단하다. 전형적인 코포스타일 문제.
으로 두면, 위 식은 간단하게 정리된다. 이고, 이다
def solve():
n = int(input())
if n%2:
print(-1)
else:
print(0, 0, n//2)
for __ in range(int(input())):
solve()
이 주어진다. 짜리 그리드를 과 로 채워야 한다. 문제는, 이웃한 숫자들 중에 다른 숫자가 딱 개 존재하게 채워야 한다. 예를 들면, 으로 채워진 칸은 이웃한 칸에 이 딱 개 존재해야 한다.
구성적 느낌의 문제다. 다음 패턴을 확장, 반복해서 출력하면 된다.
직접 그림을 그려가며 패턴을 찾아야 한다.
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
dp = [[1, 0, 0, 1]*50, [0, 1, 1, 0]*50, [0, 1, 1, 0]*50, [1, 0, 0, 1]*50]*50
def solve():
a, b = map(int, input().split())
for d in dp[:a]:
print(*d[:b])
for __ in range(int(input())):
solve()
길이가 인 가 주어진다. 우리는 모든 구간에서 와 한 를 만들어야 한다. 의 조건은 다음과 같다.
모든 구간 에 대해서 를 만족하면 하다.
에서 의 위치를 라고 가정하자. 에서 의 위치를 잘 생각해보자. 에서 의 위치는 반드시 이다. 이기 때문이다. 에서 의 위치도 고민해보자. 역시 에 위치한다.
구간 을 정의해보자. 이라고 가정하자. 이때, 에서 의 위치를 생각해보자.
이라면, 에서 는 구간 안에 존재해야 한다. 이거에 대한 정당성은 에디토리얼에 자세히 적혀 있다. 이 경우에, 해준다. 은 구간 에서 가 위치할 수 있는 경우의 수다.
가 구간 밖에 존재한다면, 구간 을 를 포함하는 구간으로 적절히 갱신해준다.
MOD = 1_000_000_007
def solve():
n = int(input())
a = list(map(int, input().split()))
ans = 1
p = [0]*n
for i in range(n):
p[a[i]] = i
l, r = p[0], p[0]
for i in range(1, n):
idx = p[i]
if l < idx < r:
ans *= (r-l+1-i)
ans %= MOD
l = min(l, idx)
r = max(r, idx)
print(ans)
for __ in range(int(input())):
solve()