sgc109   9년 전

인터넷 예선에서 정답이었는데 이곳에서는 채점중(0%) 가 유지되다가 시간초과가 납니다.

딱히 시간 초과날일도 없는것같고 아무리 여러 케이스에 대해서 테스트를 해봐도 저는 시간초과가 나질않습니다.

우분투상에서 실행을 해봤는데도 문제가 없었고 최대 케이스인 100 100 에 대해서도 시작하자마자 바로 모든 결과가

출력되고 종료될만큼 속도가 빠르고 최소 케이스인 3 3 에 대해서도 알맞게 결과가 나오는데 왜 시간초과라는 채점 결과가 나온건지 잘 모르겠습니다.

다시 한번 이 문제에 대한 채점 시스템을 확인해주시면 정말 감사드리겠습니다. 혹시몰라서 제 소스를 첨부합니다.

hahaha   9년 전

cin과 cout 은 느리니 scanf, printf 를 사용하면 될 것 같습니다.

c번의 데이터 케이스가 많아 입출력시간으로 인해 tle가 나네요 X(

h0ngjun7   9년 전

std::ios::sync_with_stdio를 써서 차이가 거의 없을 거라고 생각합니다만...

hahaha   9년 전

음... sgc109님 소스를 입출력만 바꿔서 제출해서 맞는 걸 확인하고 답변 단 거라서요 ㅠ

sgc109   9년 전

감사합니다!!

그럼 C++ 을 사용하는 대부분의 분들이 실제 대회 같은데에서 cin cout 을 잘 쓰지않는건가요??

지금 까지는 입출력을 할일이 많이 없었어서 그런지 아무문제없이 해왔었거든요.. 

hahaha   9년 전

저같은 경우에는, iostream 사용으로, 저지에서 몇 번 tle를 겪고 난 후 잘 사용하지 않게 되더라구요.

대전에서 iostream을 사용해 보진 않았지만, 저지솔루션을 공개하는 일부 해외레저널의 경우

일부 저지솔루션에 iostream으로 입출력을 하기도하니, 상황에 따라 다르지 않을까요? 

+) 찾아보니 std::ios::sync_with_stdio(false); 이 scanf,printf만큼 속도를 향상시켜주는 함수였군요; 

다만 endl 대신 '/n'을 사용하라는 말이 있어서 이리저리 바꿔내는데도, 계속 시간초과 ~_~ 왜그럴까요 ㅎㅎ

sgc109   9년 전

'/n' 이 아니라 "\n" 으로 해야하는거 아닌가요?? ㅎㅎ

어쨋든 사이트 문제인것같기도하고..

그런데 제가 std::ios::sync_with_stdio(false); 를 했을때와

scanf, printf 를 했을때 육안으로 속도 비교를 해봤는데

우분투 에서는 둘다 비슷하게 매우빨랐고

윈도우 에서는 아무리 std:ios::sync_with_stdio(false); 를 했음에도 불구하고 iostream 은 매우느렸고, scanf, printf 는 매우빨랐습니다.

서버 머신의 OS가 윈도우 여서 이런 시간 초과가 뜨는걸까요..? 흠

hahaha   9년 전

"\n"이 맞아요 제가 잘못썼네요X(

이제 저도 왜 시간초과인지 정말 궁금해지네요 ㅎㅎ

코드포스나 기타 사이트에서 올라온 글에는 "sync_with_stdio(false)가 scanf,printf만큼 속도가 향상된다" / "여전히 scanf,printf가 빠르다" 등 의견이 분분하네요.

Nada   9년 전

제 생각엔 std::ios::sync_with_stdio가 문제도 맞지만

cout << "('"<< endl 연산과 

cout << "(" << "\n"; 연산의 차이가 20배정도 납니다. 

( 이건 std::ios::sync_with_stdio가 있든 없든 마찬가지 입니다 )

아마 endl의 속도가 느려서 시간초과가 발생한거 아닌가 생각되요.

또 무슨 이유인지..std::ios::sync_with_stdio를 호출하면 n, m이 

작을 때는 문제 없는데 n, m이 100일때

사용할 수 없는 system call을 호출했다고 떠서 런타임에러가 뜨네요. 

결국 std::ios::sync_with_stdio를 지우고 endl 대신에 "\n"으로 바꿔주기만 하면

시간안에 나오는 것 같아요.

결론은 많은 출력이나 입력이 필요할 땐 scanf, printf 쓰는게 안전할듯 싶네요.

baekjoon   9년 전

cin/cout은 느리기 때문에 출력이 많은 문제에서는 scanf/printf를 쓰는 것이 좋습니다.

또, 대화에서 맞은소스라고 여기에서도 맞으리라는 보장은 없습니다. 데이터와 시간 제한이 다르기 때문입니다. 

baekjoon   9년 전

또, 테스트 케이스가 매우 많습니다. 

댓글을 작성하려면 로그인해야 합니다.