6개의 댓글이 있습니다.
-
-
iyaa -
현재 알고리즘은 (0,0) / (0,2) / (0,5) 이런식일때 제대로 해결되지 않는 것 같아, 다음과 같이 코드를 바꿨습니다만 오류가 납니다.
~~~ c++
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#includeint solve2(vector
>& board){
int left = -1;
int right = -1;
int N = board.size();
int ret = 0;
int now = -1;
int idx = 0;
for (int i = 0; i < N; i++){
if (now + 1 < board[i].first){
ret++;
cout << idx << " " << i << endl;
now = solve1(board, idx, i);
idx = i;
if (now >= N - 1){ break; }
}
}
return ret;
}int main()
{
ios::sync_with_stdio(false);
int T;
cin >> T;
while (T--){
int N;
cin >> N;
vector> board;
for (int i = 0; i < N; i++){
int buf;
cin >> buf;
int front = max(0, (i-(buf-1)));
int end = i + (buf - 1);
board.push_back(make_pair(front, end));
}
sort(board.begin(), board.end());
board.push_back(make_pair(INF, INF));
cout << solve2(board) << endl;
}
system("pause");
}
~~~
10년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.

iyaa
https://algospot.com/judge/problem/read/CAVEMAN
이 문제를 풀고 있습니다.
현재 전략은, 다음과 같습니다. (예제 기준 설명)
1 2 2 1 3 1 1 2 4
이 input를 다음과 같이 변형합니다
idx 0 1 2 3 4 5 6 7 8
val 1 2 2 1 3 1 1 2 4
after mutation
(0,0) / (0,2) / (1,3) / (3,3) / (2,6) / (5,5) / (6,6) / (6,8) / (5,11)
pair을 사용하여 저장한 후, sort 하면 다음과 같은 순서로 저장됩니다.
(0,0) / (0,2) / (1,3) / (2,6) / (3,3) / (5,5) / (5,11) / (6,6) / (6,8)
그 이후, 다음과 같이 선택합니다.
ret=0
처음 : 빛을 못받는 가장 좌측 인덱스 : 0 ret++
(0,0) / (0,2) 중 (0,2) 선택,
다음 : 빛을 못받는 가장 좌측 인덱스 : 3 ret++
(1,3) / (2,6) / (3,3) 중 (2,6) 선택,
다음 : 빛을 못받는 가장 좌측 인덱스 : 7 ret++
(5,5) / (5,11) <- second value가 N-1 이상이므로 여기서 종료
return ret합니다.
이러한 로직 자체가 틀린것인지요? 코딩이 틀린것인지요?
아래는 소스입니다.
~~~ c++
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
} > arr;
int main(){
int T;
cin >> T;
while (T--){
int N;
cin >> N;
vector
for (int i = 0; i < N; i++){
int buf;
cin >> buf;
int start = i - (buf - 1);
int end = i + (buf - 1);
arr.push_back(make_pair(start, end));
}
}
~~~
이 문제로 요며칠 고통받고있네요. 어디가 문제인지 알고싶습니다 ㅜㅜ
10년 전