Posts 10942 Palindrome
Post
Cancel

10942 Palindrome

10942 Palindrome

알고리즘(DP)

1
2
3
1. 입력으로 받은 것이 팰린드롬인지 확인
2. 팰린드롬이면 from-to 사이에 있는 모든 건 다 팰린드롬이다. -> DP에 팰린드롬임을 표시
  아니면, from-to에서 팰린드롬이 아님을 판별한 곳까지 팰린드롬이 아니다 -> DP에 팰린드롬이 아님을 표시

주의점

1
2
3
4
아무리 잘 짜도
ios::sync_with_stdio(false);
cin.tie(0);
를 써줘야 통과가 됨.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <cstring>
#define MAX_LENGTH 2001

using namespace std;

int n[MAX_LENGTH], numOfN, DP[MAX_LENGTH][MAX_LENGTH];

bool isPalindrome(int from, int to);

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> numOfN;
	for (int i = 1; i <= numOfN; i++) {
		cin >> n[i];
	}
	int numOfQ;
	cin >> numOfQ;
	for (int i = 0; i < numOfQ; i++) {
		int from, to;
		cin >> from >> to;
		if (isPalindrome(from, to))
			cout << 1 << '\n';
		else
			cout << 0 << '\n';
	}
}

bool isPalindrome(int from, int to) {
	if (DP[from][to] == 1)
		return true;
	else if (DP[from][to] == 2)
		return false;
	else {
		int fromEnd = (from + to) / 2, toEnd, tempFromEnd, temptoEnd;
		if ((from + to) % 2 == 0)
			toEnd = (from + to) / 2;
		else
			toEnd = fromEnd + 1;

		bool check = true;
		for (int i = from, j = to; i <= fromEnd && j >= toEnd; i++, j--) {
			if (DP[i][j] == 2) {
				check = false;
				tempFromEnd = i;
				temptoEnd = j;
				break;
			}
			if (DP[i][j] == 1)
				break;
			if (n[i] != n[j]) {
				check = false;
				tempFromEnd = i;
				temptoEnd = j;
				break;
			}
		}

		if (check) {
			for (int i = from, j = to; i <= fromEnd && j >= toEnd; i++, j--) {
				if (DP[i][j] != 1)
					DP[i][j] = 1;
				else
					break;
			}
			return true;
		}
		else {
			for (int i = from, j = to; i <= tempFromEnd && j >= temptoEnd; i++, j--) {
				DP[i][j] = 2;
			}
			return false;
		}
	}
}
This post is licensed under CC BY 4.0 by the author.

10830 행렬제곱

11049 행렬곱셈순서

Comments powered by Disqus.