C로 다음과 같은 그리 디 알고리즘을 구현하려고합니다.욕심 많은 TV 시청 알고리즘
알렉스는 훌륭한 텔레비젼 팬입니다. 그는 그가 관심이있는 모든 TV 프로그램을 오늘 에 기록했습니다. 그의 목록에는 n 개의 쇼가 포함되어 있는데, 그 중 i 번은 순간 li에서 시작하여 순간 ri에서 끝납니다. 알렉스는 2 대의 TV를 소유하고 있습니다. 그는 두 개의 TV에서 두 개의 다른 프로그램을 동시에 시청할 수 있지만 한 번에 한 TV에서만 하나의 프로그램을 시청할 수 있습니다. 하나의 프로그램이 다른 프로그램이 시작될 때 동시에 이 시작되면 하나의 TV에서 시청할 수 없습니다. Alex는 모든 n 쇼를 확인하려고합니다. 2 대의 TV로 충분합니까? Alex에게 도움이되는 프로그램을 작성하십시오 답을 찾아보십시오. 입력 는 첫 번째 라인은 프로그램의 개수를 나타내는 하나 개의 정수를 포함한다. 다음 n 줄 각각은 i 번째 쇼의 시작 및 종료 시간 두 개의 정수를 포함합니다. 출력 알렉스 다음 (따옴표없이) "YES"인쇄 두 TV가 사용하는 모든 프로그램을 체크 아웃 할 수있는 경우. 그렇지 않으면 "아니오"(따옴표 제외)를 인쇄하십시오. 내 구현을 실행할 때마다
는
예 입력
3
1,2
2,3
4,5
출력
은 YES
단, I는 세그멘테이션 오류가 오류를받을 . 나는 그것이 내가 보지 않고있는 무엇인가다고 확신한다. 그러나 나는 이슈들을 좁힐 수 없다.
#include <stdio.h>
int main(){
const int num;
int A[num][2]; //should be declared after fscanf
FILE* filePtr = fopen("input2.txt","r");
fscanf(filePtr, "%d\n", &num);
for(int i = 0; i < num; i++){
fscanf(filePtr, "%d, %d\n", &A[i][0], &A[i][1]);
}
fclose(filePtr);
int temp[2];
for(int i = 0; i < num; i++){
for(int j = 0; j < (num - i) - 1; j++){
if(A[j][0] > A[j+1][0]){
temp[0] = A[j][0];
temp[1] = A[j][1];
A[j][0] = A[j+1][0];
A[j][1] = A[j+1][1];
A[j+1][0] = A[j+1][0];
A[j+1][1] = A[j+1][1];
}
}
}
int TV1 = 0, TV2 = 0;
int currentShow = 0;
for(int i = A[0][0]; i <= A[num-1][0] && currentShow < num; i++){
if(i == A[currentShow][0]){
if(TV1 == 0) TV1 = A[currentShow][1] - A[currentShow][0];
else if(TV2 == 0) TV2 = A[currentShow][1] - A[currentShow][0];
else{
printf("No.\n");
break;
}
currentShow++;
}
if(TV1 > 0) TV1--;
if(TV2 > 0) TV2--;
}
if(currentShow == num) printf("Yes.\n");
return 0;
}
"한 쇼가 동시에 끝나면 다른 쇼가 시작되어 단일 TV에서 볼 수 없습니다."- 왜 안 되니? – paxdiablo
@paxdiablo 질문을 디자인하지 않았다는 것을 모르겠다 – Noah210012
알았어, 노아, 내 아이들이 하나의 TV에서 연속적인 찌꺼기가 끊임없이 쏟아지는 시간을 보면서 완벽하게 잘 지켜본 이래서 이상하게 보였다. 어쨌든 내 대답 좀 봐. – paxdiablo