tkdgns685   3년 전

파일 채점 방식이 in out 테스트 케이스들을 입력 후 나온 결과값과 out 파일을 비교해서 ac 를 판단하는 것으로 알고 있습니다.

여기서 궁금증이 생긴 것은 파일 입출력으로 입력을 받는데 cin , scanf 방식으로 입력받는 다는 것입니다. 

물론, 제출한 소스코드에 cin 이나 scanf 에 대한 것들을 매크로화 시켜서 파일 입출력으로 바꿔주면 충분히 가능하다는 것을 압니다.

여기서 제가 궁금한 것은 ios_base::sync_with_stdio(0) 가 파일 입력의 시간을 줄여주지 않는다는 것입니다.

fscanf 와 ifstream 으로 file>> 로 받는 것의 속도 차이는 3배 정도 나는 것을 확인했고 ios_base::sync_with_stdio(0) 의 경우 표준 입출력에 해당하는 것이기

때문에 사실상 cin>> 으로 문제를 제출하면 빨라질 수가 없습니다.

왜냐하면 매크로화된 파일 입출력이기 때문에 결국 파일 입출력 cin>> 으로 받기 때문입니다. 

따라서 다른 방식이 존재할까 구글링을 해보아도 c++ 에서 파일 입출력을 가속화 시켜주는 부분은 보지 못했습니다.


따라서 제가 생각한 것은 매크로화해서 바꿔주는 것이 아니라 정말 표준 입출력으로 데이터를 입력받는 다는 것인데, 그것이 어떤 방식인지 궁금합니다.

또한 fast io 같은 경우도 생각해보았는데 어떤 로직인지 정말 알고싶습니다.

(사실 알고리즘 저지 구현중입니다.)  

bupjae   3년 전

OS 에서 제공하는 redirect 를 이용합니다.

예를 들어 프로그램을 실행할 때 ./program < input.txt > output.txt 라고 실행하면

stdin 에서 읽으면 키보드가 아니라 input.txt 파일에서 읽어오고, stdout 에 출력하면 모니터가 아니라 output.txt 파일에 출력합니다.

conankun   3년 전

파이썬의 subprocess 를 검색해보세요.

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