μκ° μ ν | λ©λͺ¨λ¦¬ μ ν | μ λ΅ λΉμ¨ |
2 μ΄ | 128 MB | 43.582% |
λ¬Έμ
μ§λ―Όμ΄λ Nκ°μ μμλ₯Ό ν¬ν¨νκ³ μλ μλ°©ν₯ μν νλ₯Ό κ°μ§κ³ μλ€. μ§λ―Όμ΄λ μ΄ νμμ λͺ κ°μ μμλ₯Ό λ½μλ΄λ €κ³ νλ€.
μ§λ―Όμ΄λ μ΄ νμμ λ€μκ³Ό κ°μ 3κ°μ§ μ°μ°μ μνν μ μλ€.
- 첫 λ²μ§Έ μμλ₯Ό λ½μλΈλ€. μ΄ μ°μ°μ μννλ©΄, μλ νμ μμκ° a1, ..., akμ΄μλ κ²μ΄ a2, ..., akμ κ°μ΄ λλ€.
- μΌμͺ½μΌλ‘ ν μΉΈ μ΄λμν¨λ€. μ΄ μ°μ°μ μννλ©΄, a1, ..., akκ° a2, ..., ak, a1μ΄ λλ€.
- μ€λ₯Έμͺ½μΌλ‘ ν μΉΈ μ΄λμν¨λ€. μ΄ μ°μ°μ μννλ©΄, a1, ..., akκ° ak, a1, ..., ak-1μ΄ λλ€.
νμ μ²μμ ν¬ν¨λμ΄ μλ μ Nμ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ§λ―Όμ΄κ° λ½μλ΄λ €κ³ νλ μμμ μμΉκ° μ£Όμ΄μ§λ€. (μ΄ μμΉλ κ°μ₯ μ²μ νμμμ μμΉμ΄λ€.) μ΄λ, κ·Έ μμλ₯Ό μ£Όμ΄μ§ μμλλ‘ λ½μλ΄λλ° λλ 2λ², 3λ² μ°μ°μ μ΅μκ°μ μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
ν΄κ²°
λ¨μ ꡬνμΌλ‘ headλ₯Ό μ²μ μμ μμΉλ‘ 보μκ³ , κ°κ° μΌμͺ½μΌλ‘ νμ ν λ, μ€λ₯Έμͺ½μΌλ‘ νμ ν λλ₯Ό ν¨μ func μ λ λ²μ§Έ μΈμ dirλ‘ κ΅¬λΆνμ¬μ 0 μ΄λ©΄ 3λ² μ°μ° 1 μ΄λ©΄ 2λ² μ°μ°μ μλ―Ένλ€. κ°κ° λ°©ν₯μμ λ½μλ΄λ €κ³ νλ μμ μμΉκΉμ§μ 거리λ₯Ό λΉκ΅νμ¬ λ 짧μ λ°©ν₯μ μ ννλ€. μ νν λλ chk λ°°μ΄μ 1λ‘ λνλ΄κ³ , headλ₯Ό μ΄λμμΌ°λ€.
μ½λ
λ©λͺ¨λ¦¬ | μκ° |
1984 KB | 0 ms |
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
|
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef pair<int, int> p;
int n, m, pos[55], arr[55], chk[55], head=0, ans;
p func( int next, int dir) {
int cnt = 0, headCopy = head;
int d = dir ? 1 : n - 1;
while ( arr[headCopy] != next) {
headCopy = (headCopy + d) % n;
if (chk[headCopy]) continue;
cnt++;
}
return { cnt , headCopy };
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
scanf("%d", &pos[i]);
}
for (int i = 0; i < n; i++) arr[i] = i;
for (int i = 0; i < m; i++) {
int next = pos[i] - 1, cnt;
if (head == next) {
chk[head] = 1;
cnt = 1;
int flg = 0;
for (int j = 0; j < n; j++)
if (!chk[j]) flg = 1;
if (flg) {
while (chk[(head + cnt) % n]) cnt++;
head = (head + cnt) % n;
}
continue;
}
p left = func(next, 0);
p right = func(next, 1);
if (right.first < left.first) {
ans += right.first;
chk[right.second] = 1;
cnt = 1;
while (chk[(right.second + cnt) % n]) cnt++;
head = (right.second + cnt) % n;
}
else {
ans += left.first;
chk[left.second] = 1;
cnt = 1;
while (chk[(left.second + cnt) % n]) cnt++;
head = (left.second + cnt) % n;
}
}
printf("%d", ans);
return 0;
}
|
cs |
λ©μ§ λ°©λ²
μ΄μ¬ν κ³ λ―Όν΄μ μ½λλ₯Ό μ§°λ€κ³ μκ°νμ§λ§ λ§μ μ¬λ μ½λλ₯Ό 보λ λ μ’μ μμ΄λμ΄κ° μμλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <stdio.h>
int n, m, i, k, c, a[99];
int main() {
scanf("%d%d", &n, &m);
for (i = 0; i < m; i++)
scanf("%d", &a[i]), a[i]--;
for (i = 0; i < m; i++) {
c += a[i] > n-- / 2 ? n + 1 - a[i] : a[i];
for (k = i + 1; k < m; k++)
a[k] = (a[k] - a[i] + n) % (n + 1) % n;
}
printf("%d\n", c);
}
|
cs |
'π₯ PS(Problem Solving) π₯ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] #1068 νΈλ¦¬ (1) | 2020.04.17 |
---|---|
[BOJ] #2941 ν¬λ‘μν°μ μνλ²³ (0) | 2020.04.16 |
[BOJ] #11052 μΉ΄λ ꡬ맀νκΈ° (0) | 2020.01.10 |
[BOJ] #11722 κ°μ₯ κΈ΄ κ°μνλ λΆλΆμμ΄ (0) | 2019.12.16 |
[BOJ] #11053 κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆμμ΄ (0) | 2019.12.16 |
λκΈ