반응형
https://www.algospot.com/judge/problem/read/GRIDISLANDS
algospot.com :: GRIDISLANDS
Grid Islands 문제 정보 문제 알고스팟 시의 관광 명소는, 도시의 한가운데를 흐르는 강 위에 격자 모양으로 배치된 섬들과 이들을 잇는 다리입니다. 이 섬들은 세로 N, 가로 N+1의 격자 형태로 배치
www.algospot.com
처음 시도했던 백트래킹 방법.
결과는 시간 초과됨ㅜ
#include
int TOP = 1, LEFT = 1, DOWN, RIGHT;
int TOTALBRIDGE, OUTPUT;
int factorial(int n){ int fact = 1; for (int i = 1; i <= n; i++)fact = fact * i; return fact; }
void NUMBER(int start, int direction, int count, int _N, bool down)
{
if (_N > DOWN)
{
OUTPUT += factorial(TOTALBRIDGE - count);
return;
}
if (down)
{
NUMBER(start, direction, count + 1, _N + 1, true);
if (start != LEFT)
NUMBER(start - 1, 1, count + 1, _N, false);
if (start != RIGHT)
NUMBER(start + 1, -1, count + 1, _N, false);
}
else // left, right
{
if (direction > 0 && start >= LEFT)// LEFT
{
NUMBER(start - 1, direction, count + 1, _N, false);
NUMBER(start, direction, count + 1, _N + 1, true);
}
else if (direction < 0 && start <= RIGHT)// RIGHT
{
NUMBER(start + 1, direction, count + 1, _N, false);
NUMBER(start, direction, count + 1, _N + 1, true);
}
}
return;
}
int main()
{
int CASE, N;
for (scanf("%d", &CASE); CASE > 0; CASE-- )
{
scanf("%d", &N);
OUTPUT = 0;
DOWN = N; RIGHT = N + 1; TOTALBRIDGE = (2 * N + 1)*((2 * N + 1)/2) + N + 1;
for (int i = 1; i <= N + 1; i++)
NUMBER(i, 1, 1, 1, true);
printf("%d\n", OUTPUT % 20090711);
}
return 1;
}
반응형
'ACM준비 > algospot' 카테고리의 다른 글
KBODRAFT (0) | 2015.08.05 |
---|---|
EDIAN (0) | 2015.08.04 |
GRIDISLANDS (0) | 2015.07.30 |
BRACKETS (0) | 2015.07.30 |
WORDLENGTH (0) | 2015.07.09 |