π λ§ν¬
https://www.acmicpc.net/problem/13334
https://github.com/jokj624/PS/blob/master/10000-15000/13334.cpp
π€― νμ€ νκΈ°
λ - 무 μ΄λ ΅λ€. λ°λ‘λ§ μ°Ύλ€ μ€ν¨
π€· λ¬Έμ
π©π» νμ΄
λμΆ© μμ§μ μ μ’νκ° μμ λ, μ² λ‘ κΈΈμ΄ dλ‘ κ°μ₯ λ§μ΄ ν¬ν¨ ν μ μλ μ’ν κ°μλ₯Ό μ°ΎμΌλ©΄ λλ λ¬Έμ μ΄λ€.
μ²μ μκ°ν λ°©λ²μ μ λ§ κ·Έλ¦¬λνκ²
μ°μ μμ νμμ xμ’ν μμλλ‘ μ λ ¬ν ν, xκ° κ°μ μ yμ’ν μμλλ‘ μ λ ¬ν΄μ€λ€.
κ·Έλ¦¬κ³ x-y μ’ν μ°¨μ΄κ° dλ³΄λ€ μλ€λ©΄
1. start-end κ° μμ λ start-endλ₯Ό κ° κ° νμ¬ x-x+d λ‘ κ°±μ ν΄μ€¬λ€.
2. start-end κ° μ‘΄μ¬ν λ, νμ¬ μ’νκ° κ·Έ μμ μλμ§ νμΈ
2-1. μμ μλ€λ©΄ μΉ΄μ΄ν
2-2. μμ μλ€λ©΄ start-end μλ‘ κ°±μ
λ μ΄λ° λ°©λ²μ΄λ€. WAλ§ μμ² λ°μλ€. νλ¦° μ½λλ μλμ!
//WA
//BOJ 13334 μ² λ‘
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <limits.h>
using namespace std;
typedef long long ll;
struct point {
int x;
int y;
};
struct compare {
bool operator()(const point& p1, const point& p2) {
if(p1.x == p2.x) return p1.y > p2.y;
else return p1.x > p2.x;
}
};
bool cmp(const point& p1, const point& p2){
return p1.x < p2.x;
}
priority_queue<point, vector<point>, compare> pq;
int main()
{
int N;
vector<point> v;
cin >> N;
for(int i=0; i<N; i++){
int a, b;
scanf("%d %d", &a, &b);
v.push_back({a, b});
if(v[i].x > v[i].y) swap(v[i].x, v[i].y);
}
int d;
cin >> d;
sort(v.begin(), v.end(), cmp);
for(point tmp: v){
pq.push(tmp);
}
ll start = LLONG_MAX, end = LLONG_MAX;
int ans = 0, count = 0;
while(!pq.empty()){
point current = pq.top();
pq.pop();
// cout << current.x << " " << current.y << endl;
if((current.y - current.x) > d ) continue;
if(start == LLONG_MAX || end == LLONG_MAX){
start = current.x;
end = current.x + d;
count += 1;
ans = max(ans, count);
}
else{
if(current.x >= start && current.y <= end){
count += 1;
ans = max(count, ans);
}
else{
start = current.x;
end = current.x + d;
ans = max(count, ans);
count = 1;
}
}
}
printf("%d", ans);
return 0;
}
λ°λ‘λ₯Ό κ³ μ³λ κ³μ νλ € λ무 νλ€μλ€. κ²°κ΅ νμ΄λ₯Ό λ΄€λλ° μ°μ μμ ν 2κ°λ₯Ό μ¬μ©νλ νμ΄μλ€.
μ²μ μ°μ μμ νμλ λμ°©μ μ κΈ°μ€μΌλ‘ μ λ ¬
λλ²μ§Έ μ°μ μμ νλ μμμ μ κΈ°μ€μΌλ‘ μ λ ¬
μ²μ νμλ 미리 λͺ¨λ μ’νλ₯Ό λ£μ΄λκ³ ν΄λΉ νμ μμκ° μμλ κΉμ§ 거리 λΉκ΅λ₯Ό ν΄ λλ²μ§Έ νμ μ½μ νλ€.
μ²μ νμ top μμμ x μ’ν + d κ° μ²μ νμ top μμμ yμ’ν λ³΄λ€ μλ€λ©΄ μΈλͺ¨ μμΌλ λ²λ¦°λ€.
κ·Έκ² μλ κ²½μ° μ΄μ
λλ²μ§Έ νμ topμμμ xμ’ν + d λ³΄λ€ μ²μ νμ top μμμ yμ’νκ° λ ν¬λ€λ©΄ κ³μν΄μ λλ²μ§Έ νμ top μμλ₯Ό pop μν¨λ€. (xμ’ν κΈ°μ€ μ€λ¦μ°¨μ νμ΄λ―λ‘ x μ’νλ₯Ό λ ν¬κ² λ리λκ±°λ€!)
κ·Έλ¬λ€ μ΄λ μκ° x+d κ° νμ¬ yλ³΄λ€ μ»€μ§λ€λ©΄ λ©μΆκ³ μ²μ ν(νμ¬ μ’ν)μ topμμλ₯Ό μ½μ νλ€.
맀 μκ° λλ²μ§Έ νμ μ¬μ΄μ¦κ° 거리 dλ‘ λ§λ€ μ μλ μ² λ‘λ³ μ’ν κ°μκ° λλ€.
μ΄λ ΅λ€.. μ΄λ €μ! νλ₯Ό λκ° μ΄λ€κ³ μκ°νκΈ° μ΄λ €μ΄ λ¬Έμ κ°λ€.
π» μ½λ
//AC
//BOJ 13334 μ² λ‘
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
struct point {
int x;
int y;
};
struct compare {
bool operator()(const point& p1, const point& p2) {
if(p1.y == p2.y) return p1.x > p2.x;
else return p1.y > p2.y;
} // λμ κΈ°μ€ μ λ ¬
};
struct cmp{
bool operator()(const point& p1, const point& p2){
return p1.x > p2.x;
}
}; // μμμ κΈ°μ€ μ λ ¬
priority_queue<point, vector<point>, compare> pq; // λμ κΈ°μ€ μ λ ¬
priority_queue<point, vector<point>, cmp> spq; //μμμ κΈ°μ€ μ λ ¬
int main()
{
int N;
vector<point> v;
cin >> N;
for(int i=0; i<N; i++){
int a, b;
scanf("%d %d", &a, &b);
v.push_back({a, b});
if(v[i].x > v[i].y) swap(v[i].x, v[i].y);
}
int d;
cin >> d;
for(point tmp: v){
pq.push(tmp);
}
int ans = 0, count = 0;
while(!pq.empty()){
if(pq.top().x + d < pq.top().y){ //νμ¬ x-y κ±°λ¦¬κ° dλ³΄λ€ ν¬λ©΄ νμ μμ
pq.pop();
}
else{
while(!spq.empty() && spq.top().x + d < pq.top().y){
spq.pop(); //νμ¬ yκ°μ΄ μ λ΅νμ μλ κΈ°μ‘΄ μ² λ‘ xκ°+d(거리) λ³΄λ€ ν¬λ€λ©΄ κΈ°μ‘΄ μ² λ‘ μμμ xλ₯Ό λ²λ¦¬κ³ κ³μν΄μ μ¦κ°μν¨λ€.
}
spq.push(pq.top()); // νμ¬ x-yλ₯Ό μ λ΅ νμ λ£λλ€.
pq.pop();
int len = spq.size();
ans = max(ans, len); // λ§€λ² μ¬μ΄μ¦ λΉκ΅νμ¬ μ΅λκ° κ°±μ
}
}
printf("%d", ans);
return 0;
}
'DEV > PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ/21872] Deque Game, c++ (0) | 2021.06.04 |
---|---|
[BOJ/1103] κ²μ, c++ (0) | 2021.05.29 |
[BOJ/18405] κ²½μμ μ μΌ, c++ (0) | 2021.05.17 |
[BOJ/20127] Y-μμ΄, C++ (0) | 2021.05.14 |
μ 1ν SMUPC μλͺ νλ‘κ·Έλλ° κ²½μ§λν μ°Έκ° νκΈ° (4) | 2021.05.09 |