-
Notifications
You must be signed in to change notification settings - Fork 1
/
zad4_ms.cpp
92 lines (81 loc) · 1.81 KB
/
zad4_ms.cpp
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <queue>
using namespace std;
typedef enum pora
{
Wiosna,
Lato,
Jesień,
Zima
} pora;
pora next_season(pora season)
{
int v = season + 1;
return (pora)(v % 4);
}
int pory(int size, pora arr[])
{
if (size <= 0)
return -1;
int shortestLength = -1;
// take each season as first
for (int s = 0; s < 4; s++)
{
int currentLength = -1;
// queue which value is awaited
queue<pora> q;
q.push((pora)s);
for (int i = 0; i < 3; i++)
{
q.push(next_season(q.back()));
}
for (int i = 0; i < size; i++)
{
if (q.front() == arr[i])
{
if (currentLength == -1)
{
// first hit
currentLength = 0;
}
// move queue
q.push(q.front());
q.pop();
// if sequence is completed
if (q.front() == (pora)s)
{
if(shortestLength == -1)
shortestLength = currentLength;
if(shortestLength < currentLength){
shortestLength = currentLength;
}
currentLength = -1;
}
}
if (currentLength >= 0)
currentLength++;
}
}
return shortestLength;
}
int main()
{
int n;
cin >> n;
pora *arr = (pora *)malloc((size_t)n * sizeof(pora));
for (int i = 0; i < n; i++)
{
int input;
cin >> input;
if (input >= 0 && input <= 3)
{
arr[i] = (pora)input;
}
else
i --;
;
}
int w = pory(n, arr);
cout << w << endl;
free(arr);
}