2016-07-20 4 views
1

영어로 이것을 어떻게 표현할 지 모르겠지만 대답을 찾기가 꽤 어려웠습니다! 그래서, 나는 가장 긴 낮잠 문제를 할 노력하고있어UVa - 가장 긴 낮잠

: 내 코드가 작동하고 있지만 판사 잘못된 응답받는 유지하고 나는 두 개의 테스트 케이스에 입력 할 때 문제가 생각 https://uva.onlinejudge.org/external/101/10191.pdf

행. 그래서

1 
12:00 13:00 schedule A 

:

Day #1: the longest nap starts at 13:00 and will last for 5 hours and 0 minutes. 

을하지만 난 입력하면 :

내가 입력

1 
2 

숫자 2는 새로운 테스트 케이스로 무시되고 나는 그 이유 가정 판사님의 대답이 잘못되었습니다.

그래서 두 번째 숫자를 입력하고 싶습니다. 두 번째 scanf가 내 코드에서 새 테스트 케이스가됩니다. 내 스위치 케이스의 경우 1 추가하려고 : 내가 입력 한 새로운 테스트 케이스가이 변수에 의해하지만 성공

while(scanf("%d", &testcase) == 1) { 

    int result = 0, start; 

    if(testcase > MAXVALUE) continue; 
    //here I ignore testcase > 100 
    if(testcase == 0) {ret = SCANF; start = STARTIME; result = WORK;} 
    //if there's no testcase my longest nap will be the 8 hours! SCANF = 5 

    for(i = 0; i < testcase; i++) { 
     ret = scanf("%d:%d %d:%d %255[a-zA-Z ]", &initH, &initM, &fintH, &fintM, appoint); 
     //variables: H(hour), M(minute), appointment 

     switch (ret){ 
     case 5: 
      schedule[i].start = initH*HOUR + initM; //struct here 
      schedule[i].endin = fintH*HOUR + fintM; //to keep this data 
      break; 
     default: 
      i = testcase; 
      break; 
     } 

     if((initH < INIT) || (fintM + fintH*HOUR) > ENDTIME) {error++; break;} 
     //10:00 < time < 18:00 
     if((initH*HOUR + initM) > (fintH*HOUR + fintM)) {error++; break;} 
     //initial hour in a schedule < end time in a schedule 

     while(getchar() != '\n'); 
    } 

    if(error != 0) {error = 0; continue;} //if error then ignore everything! 
+0

두 번째 입력이 잘못되었습니다. "1"이있는 행이 있으면 그날의 단일 약속이있는 다른 행이 필요합니다. * 전에 * 다음 날에 두 개의 약속이 있음을 알릴 수 있습니다. – Matthias

+0

"2"와 같이 두 번째 숫자를 입력하면 숫자 "1"을 무시하고 싶습니다. 그래서 "ret"변수가 값을 "1"로 얻는다면, 새로운 테스트 케이스 번호로 인식하고 싶습니다. –

+0

'appoint','schedule []' 정의를 포스트 정의합니다. – chux

답변

0

잘 잡히면 때문에 나는 initH 할 테스트 케이스 강제로, 나는에 붙어 있었어요 어제 종일 하루 종일 내가 도움을 청하기로 결정했을 때 나는 해결책을 찾아 냈다. 실제로 꽤 쉽다!

if(ret == 5){ //only if I have 5 arguments in my scanf! 
    if((initH < INIT) || (fintM + fintH*HOUR) > ENDTIME) {error++; break;} 
    //10:00 < time < 18:00 
    if((initH*HOUR + initM) > (fintH*HOUR + fintM)) {error++; break;} 
    //initial hour in a schedule < end time in a schedule 
}