ADDED SRM/587-U/1A.cpp Index: SRM/587-U/1A.cpp ================================================================== --- SRM/587-U/1A.cpp +++ SRM/587-U/1A.cpp @@ -0,0 +1,94 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long LL; +typedef complex CMP; + +class JumpFurther { public: + int furthest(int N, int badStep) + { + int sigma = 0; + for(int X=1; X<=N; ++X) + { + sigma += X; + if(sigma == badStep) + --sigma; + } + return sigma; + } +}; + +// BEGIN CUT HERE +#include +double start_time; string timer() + { ostringstream os; os << " (" << int((clock()-start_time)/CLOCKS_PER_SEC*1000) << " msec)"; return os.str(); } +template ostream& operator<<(ostream& os, const vector& v) + { os << "{ "; + for(typename vector::const_iterator it=v.begin(); it!=v.end(); ++it) + os << '\"' << *it << '\"' << (it+1==v.end() ? "" : ", "); os << " }"; return os; } +void verify_case(const int& Expected, const int& Received) { + bool ok = (Expected == Received); + if(ok) cerr << "PASSED" << timer() << endl; else { cerr << "FAILED" << timer() << endl; + cerr << "\to: \"" << Expected << '\"' << endl << "\tx: \"" << Received << '\"' << endl; } } +#define CASE(N) {cerr << "Test Case #" << N << "..." << flush; start_time=clock(); +#define END verify_case(_, JumpFurther().furthest(N, badStep));} +int main(){ + +CASE(0) + int N = 2; + int badStep = 2; + int _ = 3; +END +CASE(1) + int N = 2; + int badStep = 1; + int _ = 2; +END +CASE(2) + int N = 3; + int badStep = 3; + int _ = 5; +END +CASE(3) + int N = 1313; + int badStep = 5858; + int _ = 862641; +END +CASE(4) + int N = 1; + int badStep = 757065; + int _ = 1; +END +CASE(5) + int N = 2000; + int badStep = 123456; + int _ = -1; +END +CASE(6) + int N = 2000; + int badStep = 3; + int _ = -1; +END +CASE(7) + int N = 2000; + int badStep = 4000000; + int _ = -1; +END + +} +// END CUT HERE ADDED SRM/587-U/1B-U.cpp Index: SRM/587-U/1B-U.cpp ================================================================== --- SRM/587-U/1B-U.cpp +++ SRM/587-U/1B-U.cpp @@ -0,0 +1,155 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long LL; +typedef complex CMP; + +class ThreeColorability { public: + vector lexSmallest(vector cells) + { + if(!can(cells)) + return vector(); + + for(int y=0; y& C) + { + int N = C[0].size(); + vector P(N, (1<<6)-1); + + for(int y=0; y& P, const string& C) + { + for(int i=0; i +double start_time; string timer() + { ostringstream os; os << " (" << int((clock()-start_time)/CLOCKS_PER_SEC*1000) << " msec)"; return os.str(); } +template ostream& operator<<(ostream& os, const vector& v) + { os << "{ "; + for(typename vector::const_iterator it=v.begin(); it!=v.end(); ++it) + os << '\"' << *it << '\"' << (it+1==v.end() ? "" : ", "); os << " }"; return os; } +void verify_case(const vector & Expected, const vector & Received) { + bool ok = (Expected == Received); + if(ok) cerr << "PASSED" << timer() << endl; else { cerr << "FAILED" << timer() << endl; + cerr << "\to: " << Expected << endl << "\tx: " << Received << endl; } } +#define CASE(N) {cerr << "Test Case #" << N << "..." << flush; start_time=clock(); +#define END verify_case(_, ThreeColorability().lexSmallest(cells));} +int main(){ + +CASE(0) + string cells_[] = {"Z"}; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + string __[] = {"Z" }; + vector _(__, __+sizeof(__)/sizeof(*__)); +END +CASE(1) + string cells_[] = {"??", "?N"}; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + string __[] = {"NN", "NN" }; + vector _(__, __+sizeof(__)/sizeof(*__)); +END +CASE(2) + string cells_[] = {"ZZZ", "ZNZ"}; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + vector _; +END +CASE(3) + string cells_[] = {"N?N??NN","??ZN??Z","NN???Z?","ZZZ?Z??","Z???NN?","N?????N","ZZ?N?NN"}; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + vector _; +END +CASE(4) + string cells_[] = {"ZZZZ","ZZZZ","ZZZZ"}; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + string __[] = {"ZZZZ", "ZZZZ", "ZZZZ" }; + vector _(__, __+sizeof(__)/sizeof(*__)); +END +/* +CASE(5) + string cells_[] = ; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + string __[] = ; + vector _(__, __+sizeof(__)/sizeof(*__)); +END +CASE(6) + string cells_[] = ; + vector cells(cells_, cells_+sizeof(cells_)/sizeof(*cells_)); + string __[] = ; + vector _(__, __+sizeof(__)/sizeof(*__)); +END +*/ +} +// END CUT HERE