[BOJ] #13414 μκ°μ μ²
μκ° μ ν | λ©λͺ¨λ¦¬ μ ν | μ λ΅ λΉμ¨ |
1μ΄ | 256MB | 19.578% |
13414λ²: μκ°μ μ²
μ λ ₯ λ°μ΄ν°λ νμ€ μ λ ₯μ μ¬μ©νλ€. μ λ ₯μ 1κ°μ ν μ€νΈ λ°μ΄ν°λ‘ ꡬμ±λλ€. μ λ ₯μ 첫 λ²μ§Έ μ€μλ κ³Όλͺ©μ μκ° κ°λ₯ μΈμ K(1 ≤ K ≤ 100,000)μ νμλ€μ΄ λ²νΌμ ν΄λ¦ν μμλ₯Ό κΈ°λ‘ν λκΈ°λͺ©λ‘μ κΈΈμ΄ L(1 ≤ L ≤ 500,000)μ΄ μ£Όμ΄μ§λ€. λ λ²μ§Έ μ€λΆν° Lκ°μ μ€μλ μκ°μ μ²μ λ²νΌμ ν΄λ¦ν νμμ νλ²μ΄ ν΄λ¦ μμλλ‘ μ£Όμ΄μ§λ€. νλ²μ 8μ리μ μ«μλ‘ μ΄λ£¨μ΄μ Έ μλ€.
www.acmicpc.net
λ¬Έμ
μνμ°©μ€
μ²μμ μ κ·Όμ μλͺ»ν΄μ μ΄λΌ λ§μ΄ νλ¦Ό. λ°νμμλ¬λ λ¬μκ³ λ°νμμλ¬ μ‘μΌλ μκ°μ΄κ³Ό λ μ μμ λ©λΆ..
μ λ ₯μΌλ‘ λ€μ΄μ¨ νλ²λ€μ λ€λ₯Έ λ°°μ΄μ μ μ₯νμ§ μκ³ λ¨μ mapμΌλ‘λ§ ν μ μμ§ μμκΉ μΆμ΄μ mapμ {νλ², μμ}λ₯Ό μ μ₯νκ³ κ·Έ νμ, keyκ° μλ valueλ‘ μ λ ¬νκ³ μΆμ΄μ vectorλ‘ λ³΅μ¬νκ³ , cmpν¨μ μ¬μ©ν΄μ μ λ ¬νκ³ , μΆλ ₯νλ λ°©μμΌλ‘ νμλ€.
κ·Έλ°λ° μκ°μ΄κ³Όκ° μλ κ² κ°μλλ° λ³΅μ¬νλλ° μ€λ걸린건μ§.. λλ체 μ μκ°μ΄κ³Ό λ¬λμ§ μμ§λ μ λͺ¨λ₯΄κ² μ§λ§ κ²°κ΅ μ λΆ μ§μ°κ³ λ€μνμλλ°, mapμ valueκ°μΌλ‘ μ λ ¬νλ κ²λ³΄λ€ μ λ ₯λ°μμ λ μ λ ₯λ°μ νλ²λ€μ λ°°μ΄μ μ μ₯ν΄μ λ°°μ΄μ μ΄μ©ν΄μ ν μ μμλ€.
κ·Έλ¦¬κ³ λ νλ μ΄λ €μ λ μ μ stringμ μ°μ§ μκ³ intνμΌλ‘ μ λ ₯μ λ°λ€λ³΄λ 0000000 μ΄λ° κ°μ 0μΌλ‘ μΈμλμ΄μ 8μ리λ₯Ό λ§μΆκΈ° μνμ¬ μΆλ ₯νμμ "%08d" μ΄λ κ² μΌλ€. μλ―Έλ 8μ리 μΌμͺ½μ λ ¬μ΄λ©° λΉ κ³΅κ°μ 0μΌλ‘ μ±μ°κ² λ€λ μλ―Έμ΄λ€. %08d νμμ§μ μλ₯Ό μμΌλ‘μ¨ stringμ μ μΆλ ₯μ μν΄ μ¬μ©ν΄μΌνλ μλ λ¬Έμ₯λ€μ μμ¨λ λΌμ μ°Έ μ’μλ€.
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
μ°Έκ³ λ§ν¬ 1. vector μ λ ¬: vector cmp ν¨μ κ΄λ ¨
How do I sort a vector of pairs based on the second element of the pair?
If I have a vector of pairs: std::vector<std::pair<int, int=""> > vec; Is there and easy way to sort the list in increasing order based on the second element of the pair? I know I can w...</std::pair<int,>
stackoverflow.com
μ°Έκ³ λ§ν¬ 2. μΈμ΄λ³ input method λΉκ΅: cin, cout μΈ λ μμ λ¬Έμ₯μ μ¨μΌνλ μ΄μ
algospot.com :: μμ κ²μν: κ° μΈμ΄λ³ input method λΉκ΅
κ° μΈμ΄λ³ input method λΉκ΅ 13κ°μ λκΈμ΄ μμ΅λλ€.
algospot.com
μ½λ μΌλΆ
bool cmp(const p& a, const p& b) {
return a.second < b.second;
}
// λ©μΈν¨μ
map<int, int> m;
...
// map 볡μ¬
vector<p> v(m.begin(), m.end());
//sort(v.begin(), v.end(), cmp);
// c++14 μμλ autoλ₯Ό νμ©νμ¬ μ΄λ κ² μ λ ¬ν μλ μλ€.
sort(v.begin(), v.end(), [](auto& left, auto& right) {
return left.second < right.second;
});
...
ν΄κ²°
key point, mapμ νμ©ν΄μ κ° νμμ΄ μ΅μ’ μ μΌλ‘ λͺ λ²μ§Έλ‘ λ€μ΄μλμ§ μ μ₯νλ€.
- νλ²μ keyλ‘, λ€μ΄μ¨ μμλ₯Ό valueλ‘ mapμ ꡬμ±νλ€.
- μ λ ₯λ°μ νλ²μ λ λ€λ₯Έ intλ°°μ΄μ μμλλ‘ μ μ₯νλ€.
- 1λΆν° λ§μ§λ§ μμκΉμ§ μ°¨λ‘λ‘ λλ©΄μ iλ²μ§Έλ‘ λ€μ΄μ¨ νμμ΄ mapμμ μ μ₯ν μμμ κ°μμ§ νλ¨νμ¬ κ°μΌλ©΄ μΆλ ₯νκ³ cntλ₯Ό μ¦κ°μν¨λ€.
- cntκ° kμ κ°μμ§λ©΄ kλͺ κΉμ§ λͺ¨λ μ μ λ κ²μ΄λ―λ‘ λ°λ³΅λ¬Έμ μ’ λ£νλ€.
μ½λ
λ©λͺ¨λ¦¬ | μκ° |
13312 KB | 472 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
|
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
int k, l, arr[500005];
map<int, int> m;
int main() {
scanf("%d %d", &k, &l);
string s;
for (int i = 0; i < l; i++) {
scanf("%d", &arr[i]);
m[arr[i]] = i;
}
int cnt = 0;
for (int i = 0; i < l; i++) {
if (cnt >= k)break;
if (m[arr[i]] == i) {
printf("%08d\n", arr[i]);
cnt++;
}
}
return 0;
}
|
cs |
νκΈ°
μ²μ μ κ·Όμ μλͺ»ν΄μ ν° μ½ λ€μΉ λ¬Έμ .. μμ§ μκ² μ΄
κ·Έλ¦¬κ³ μ΄λ² λ¬Έμ λν kλμ μμλ₯Ό μ¨μ λ§μ΄ νλ Έλλ°... λ§μ§λ§ μ€μμ΄κΈΈ