#define cose_says( ... )
//------------------------------------------------------------------------------------------
#include <ctime>
class WATCH
{
clock_t begin;
public:
auto operator!() { begin = clock(); }
auto operator~()
{
return (float)( clock() - begin ) / CLOCKS_PER_SEC;
}
};
WATCH watch;
//------------------------------------------------------------------------------------------
#include<io.h>
class redirect
{
FILE* fp;
int fd;
fpos_t pos;
public:
redirect( const char* filename, const char* mode = "wb", FILE* as = stdout )
{
fgetpos( as, &pos );
fd = _dup( fileno( as ) );
fp = freopen( filename, mode, as );
}
~redirect()
{
fflush( fp );
_dup2( fd, fileno( fp ) );
close( fd );
clearerr( fp );
fsetpos( fp, &pos );
}
};
cose_says
(
생성자에서 표준출력이나 표준입력을 file로 redirect 해주고,
소멸자에서 원복시키는 구조
)
//------------------------------------------------------------------------------------------
I2RlZmluZSBjb3NlX3NheXMoIC4uLiApCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojaW5jbHVkZSA8Y3RpbWU+CgpjbGFzcyAgICAgICBXQVRDSAp7CiAgICBjbG9ja190IGJlZ2luOwoKcHVibGljOgogICAgYXV0byAgICBvcGVyYXRvciEoKSB7IGJlZ2luID0gY2xvY2soKTsgfQogICAgYXV0byAgICBvcGVyYXRvcn4oKQogICAgewogICAgICAgIHJldHVybiAgKGZsb2F0KSggY2xvY2soKSAtIGJlZ2luICkgLyBDTE9DS1NfUEVSX1NFQzsKICAgIH0KfTsKCldBVENIICAgd2F0Y2g7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojaW5jbHVkZTxpby5oPgoKY2xhc3MgICAgICAgcmVkaXJlY3QKewogICAgRklMRSogICBmcDsKICAgIGludCAgICAgZmQ7CiAgICBmcG9zX3QgIHBvczsKCnB1YmxpYzoKICAgIHJlZGlyZWN0KCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogbW9kZSA9ICJ3YiIsIEZJTEUqIGFzID0gc3Rkb3V0ICkKICAgIHsKICAgICAgICBmZ2V0cG9zKCBhcywgJnBvcyApOwogICAgICAgIGZkID0gX2R1cCggZmlsZW5vKCBhcyApICk7CiAgICAgICAgZnAgPSBmcmVvcGVuKCBmaWxlbmFtZSwgbW9kZSwgYXMgKTsKICAgIH0KICAgIH5yZWRpcmVjdCgpCiAgICB7CiAgICAgICAgZmZsdXNoKCBmcCApOwogICAgICAgIF9kdXAyKCBmZCwgZmlsZW5vKCBmcCApICk7CiAgICAgICAgY2xvc2UoIGZkICk7CiAgICAgICAgY2xlYXJlcnIoIGZwICk7CiAgICAgICAgZnNldHBvcyggZnAsICZwb3MgKTsKICAgIH0KfTsKCmNvc2Vfc2F5cwooCiAgICDsg53shLHsnpDsl5DshJwg7ZGc7KSA7Lac66Cl7J2064KYIO2RnOykgOyeheugpeydhCBmaWxl66GcIHJlZGlyZWN0IO2VtOyjvOqzoCwKICAgIOyGjOupuOyekOyXkOyEnCDsm5Drs7Xsi5ztgqTripQg6rWs7KGwCikKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K