File Annotation
Not logged in
23dfcca431 2011-02-23        kinaba: //-----------------------------------------------------------------------------
23dfcca431 2011-02-23        kinaba: // >>Code Template<< (for Visual C++)
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: #include <iostream>
23dfcca431 2011-02-23        kinaba: #include <sstream>
23dfcca431 2011-02-23        kinaba: #include <iomanip>
23dfcca431 2011-02-23        kinaba: #include <string>
23dfcca431 2011-02-23        kinaba: #include <vector>
23dfcca431 2011-02-23        kinaba: #include <set>
23dfcca431 2011-02-23        kinaba: #include <map>
23dfcca431 2011-02-23        kinaba: #include <algorithm>
23dfcca431 2011-02-23        kinaba: #include <numeric>
23dfcca431 2011-02-23        kinaba: #include <iterator>
23dfcca431 2011-02-23        kinaba: #include <complex>
23dfcca431 2011-02-23        kinaba: #include <functional>
23dfcca431 2011-02-23        kinaba: #include <queue>
23dfcca431 2011-02-23        kinaba: #include <stack>
23dfcca431 2011-02-23        kinaba: #include <cmath>
23dfcca431 2011-02-23        kinaba: #include <cassert>
23dfcca431 2011-02-23        kinaba: #include <cstring>
23dfcca431 2011-02-23        kinaba: #define  cout os
23dfcca431 2011-02-23        kinaba: using namespace std;
23dfcca431 2011-02-23        kinaba: typedef long long LL;
23dfcca431 2011-02-23        kinaba: typedef complex<double> CMP;
23dfcca431 2011-02-23        kinaba: void END_OF_INPUT_FOR_THIS_TEST_CASE(); // stub for multi-threading
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: //-----------------------------------------------------------------------------
23dfcca431 2011-02-23        kinaba: // >>Main<<
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: void case_main( ostream& os )
23dfcca431 2011-02-23        kinaba: {
23dfcca431 2011-02-23        kinaba: 	END_OF_INPUT_FOR_THIS_TEST_CASE();
23dfcca431 2011-02-23        kinaba: }
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: //-----------------------------------------------------------------------------
23dfcca431 2011-02-23        kinaba: // >>Code Template<< (Multi-Thread Solver)
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: #if 1
23dfcca431 2011-02-23        kinaba: #undef cout
23dfcca431 2011-02-23        kinaba: #include <windows.h>
23dfcca431 2011-02-23        kinaba: #include <process.h>
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: static const int THREAD_NUM = 2;
23dfcca431 2011-02-23        kinaba: volatile int     g_id;
23dfcca431 2011-02-23        kinaba: int              g_nCase;
23dfcca431 2011-02-23        kinaba: CRITICAL_SECTION g_cs;
23dfcca431 2011-02-23        kinaba: vector<string>   g_output;
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: unsigned __stdcall thread_main( void* t_id ) {
23dfcca431 2011-02-23        kinaba: 	for(;;) {
23dfcca431 2011-02-23        kinaba: 		EnterCriticalSection(&g_cs);
23dfcca431 2011-02-23        kinaba: 		const int id = ++g_id;
23dfcca431 2011-02-23        kinaba: 		if(id>g_nCase) { LeaveCriticalSection(&g_cs); break; }
23dfcca431 2011-02-23        kinaba: 		cerr << setw(4) << id << " @ " << (int)t_id << " start" << endl;
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: 		ostringstream ss;
23dfcca431 2011-02-23        kinaba: 		ss << "Case #" << id << ": ";
23dfcca431 2011-02-23        kinaba: 		case_main( ss );
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: 		EnterCriticalSection(&g_cs);
23dfcca431 2011-02-23        kinaba: 		if(g_output.size()<id) g_output.resize(id);
23dfcca431 2011-02-23        kinaba: 		g_output[id-1] = ss.str();
23dfcca431 2011-02-23        kinaba: 		cerr << setw(4) << id << " @ " << (int)t_id << " end" << endl;
23dfcca431 2011-02-23        kinaba: 		LeaveCriticalSection(&g_cs);
23dfcca431 2011-02-23        kinaba: 	}
23dfcca431 2011-02-23        kinaba: 	return 0;
23dfcca431 2011-02-23        kinaba: }
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: void END_OF_INPUT_FOR_THIS_TEST_CASE() { LeaveCriticalSection(&g_cs); }
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: int main() {
23dfcca431 2011-02-23        kinaba: 	cin >> g_nCase;
23dfcca431 2011-02-23        kinaba: 	string dummy; getline(cin, dummy);
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: 	InitializeCriticalSection(&g_cs);
23dfcca431 2011-02-23        kinaba: 	vector<HANDLE> thread;
23dfcca431 2011-02-23        kinaba: 	for(int i=0; i<THREAD_NUM; ++i)
23dfcca431 2011-02-23        kinaba: 		thread.push_back( (HANDLE)_beginthreadex(0, 0, &thread_main, (void*)i, 0, 0) );
23dfcca431 2011-02-23        kinaba: 	WaitForMultipleObjects( thread.size(), &thread[0], TRUE, INFINITE );
23dfcca431 2011-02-23        kinaba: 	DeleteCriticalSection(&g_cs);
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: 	copy( g_output.begin(), g_output.end(), ostream_iterator<string>(cout) );
23dfcca431 2011-02-23        kinaba: }
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: //-----------------------------------------------------------------------------
23dfcca431 2011-02-23        kinaba: // >>Code Template<< (Single-Thread Solver)
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: #else
23dfcca431 2011-02-23        kinaba: #undef cout
23dfcca431 2011-02-23        kinaba: void END_OF_INPUT_FOR_THIS_TEST_CASE() {}
23dfcca431 2011-02-23        kinaba: int main() {
23dfcca431 2011-02-23        kinaba: 	int nCase; cin >> nCase;
23dfcca431 2011-02-23        kinaba: 	string dummy; getline(cin, dummy);
23dfcca431 2011-02-23        kinaba: 
23dfcca431 2011-02-23        kinaba: 	for(int id=1; id<=nCase; ++id) {
23dfcca431 2011-02-23        kinaba: 		cout << "Case #" << id << ": ";
23dfcca431 2011-02-23        kinaba: 		case_main( cout );
23dfcca431 2011-02-23        kinaba: 	}
23dfcca431 2011-02-23        kinaba: }
23dfcca431 2011-02-23        kinaba: #endif