这场比赛没赶上,本以为是晚上9:00的,还特意把晚上的课给翘了,兴高采烈地回到宿舍,才发现在上午就比完了,哎,抱憾!!!
只好享受赛后的无趣咯...
Score250.
这题出的感觉对不起选手,把选手当弱智对待了...
class WhichDay { public: string getDay(vector <string> notOnThisDay) { bool vst[7]; memset(vst, 0, sizeof(vst)); map<string , int> g; g["Sunday"] = 0; g["Monday"] = 1; g["Tuesday"] = 2; g["Wednesday"] = 3; g["Thursday"] = 4; g["Friday"] = 5; g["Saturday"] = 6; for(int i = 0; i < 6; ++i) vst[ g[ notOnThisDay[i] ] ] = 1; if( !vst[0] ) return "Sunday"; if( !vst[1] ) return "Monday"; if( !vst[2] ) return "Tuesday"; if( !vst[3] ) return "Wednesday"; if( !vst[5] ) return "Friday"; if( !vst[4] ) return "Thursday"; //if( !vst[6] ) return "Saturday"; } };
这题不知道可不可以归类为恶心的模拟题,因为思想很简单,如果有好的简便方法,我是没想出来了,因为在模拟比赛,时间短,我会直接照着赤裸裸的方法过。
template<class T> T cAbs(T x) { if(x < 0) return -x; return x; } class ThreeTeleports { public: long long dd(int x, int y, int _x, int _y) { return cAbs(x - _x) + cAbs(y - _y); } void foo(int &x, int &y, int &_x, int &_y, string str) { x = y = _x = _y = 0; int L = (int)str.length(); int i = 0; for( ; str[i] != ' '; ++i) x = 10 * x + (str[i] - '0'); for(++i; str[i] != ' '; ++i) y = 10 * y + (str[i] - '0'); for(++i; str[i] != ' '; ++i) _x = 10 * _x + (str[i] - '0'); for(++i; i < L; ++i) _y = 10 * _y + (str[i] - '0'); } int shortestDistance(int xMe, int yMe, int xHome, int yHome, vector <string> teleports) { int a, b, _a, _b, c, d, _c, _d, e, f, _e, _f; foo(a, b, _a, _b, teleports[0]); foo(c, d, _c, _d, teleports[1]); foo(e, f, _e, _f, teleports[2]); long long ans = dd(xMe, yMe, xHome, yHome); if( ans <= 10 ) return (int)ans; ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, xHome, yHome)); if( ans <= 20 ) return (int)ans; //ab ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, _e, _f) + 10 + dd(e, f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, _e, _f) + 10 + dd(e, f, xHome, yHome)); //cd ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, _e, _f) + 10 + dd(e, f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, _e, _f) + 10 + dd(e, f, xHome, yHome)); //ef ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, _c, _d) + 10 + dd(c, d, xHome, yHome)); if( ans <= 30 ) return (int)ans; //ab.cd.ef ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, c, d) + 10 + dd(_c, _d, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, c, d) + 10 + dd(_c, _d, _e, _f) + 10 + dd(e, f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, _c, _d) + 10 + dd(c, d, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, _c, _d) + 10 + dd(c, d, _e, _f) + 10 + dd(e, f, xHome, yHome)); //ab.ef.cd ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, e, f) + 10 + dd(_e, _f, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, e, f) + 10 + dd(_e, _f, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, _e, _f) + 10 + dd(e, f, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, a, b) + 10 + dd(_a, _b, _e, _f) + 10 + dd(e, f, _c, _d) + 10 + dd(c, d, xHome, yHome)); //cd.ab.ef ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, a, b) + 10 + dd(_a, _b, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, a, b) + 10 + dd(_a, _b, _e, _f) + 10 + dd(e, f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, _a, _b) + 10 + dd(a, b, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, _a, _b) + 10 + dd(a, b, _e, _f) + 10 + dd(e, f, xHome, yHome)); //cd.ef.ab ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, e, f) + 10 + dd(_e, _f, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, e, f) + 10 + dd(_e, _f, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, _e, _f) + 10 + dd(e, f, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, c, d) + 10 + dd(_c, _d, _e, _f) + 10 + dd(e, f, _a, _b) + 10 + dd(a, b, xHome, yHome)); //ef.ab.cd ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, a, b) + 10 + dd(_a, _b, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, a, b) + 10 + dd(_a, _b, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, _a, _b) + 10 + dd(a, b, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, _a, _b) + 10 + dd(a, b, _c, _d) + 10 + dd(c, d, xHome, yHome)); //ef.cd.ab ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, c, d) + 10 + dd(_c, _d, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, c, d) + 10 + dd(_c, _d, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, _c, _d) + 10 + dd(c, d, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, e, f) + 10 + dd(_e, _f, _c, _d) + 10 + dd(c, d, _a, _b) + 10 + dd(a, b, xHome, yHome)); ////////////////////////// //ab.cd.ef ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, c, d) + 10 + dd(_c, _d, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, c, d) + 10 + dd(_c, _d, _e, _f) + 10 + dd(e, f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, _c, _d) + 10 + dd(c, d, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, _c, _d) + 10 + dd(c, d, _e, _f) + 10 + dd(e, f, xHome, yHome)); //ab.ef.cd ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, e, f) + 10 + dd(_e, _f, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, e, f) + 10 + dd(_e, _f, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, _e, _f) + 10 + dd(e, f, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _a, _b) + 10 + dd(a, b, _e, _f) + 10 + dd(e, f, _c, _d) + 10 + dd(c, d, xHome, yHome)); //cd.ab.ef ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, a, b) + 10 + dd(_a, _b, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, a, b) + 10 + dd(_a, _b, _e, _f) + 10 + dd(e, f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, _a, _b) + 10 + dd(a, b, e, f) + 10 + dd(_e, _f, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, _a, _b) + 10 + dd(a, b, _e, _f) + 10 + dd(e, f, xHome, yHome)); //cd.ef.ab ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, e, f) + 10 + dd(_e, _f, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, e, f) + 10 + dd(_e, _f, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, _e, _f) + 10 + dd(e, f, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _c, _d) + 10 + dd(c, d, _e, _f) + 10 + dd(e, f, _a, _b) + 10 + dd(a, b, xHome, yHome)); //ef.ab.cd ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, a, b) + 10 + dd(_a, _b, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, a, b) + 10 + dd(_a, _b, _c, _d) + 10 + dd(c, d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, _a, _b) + 10 + dd(a, b, c, d) + 10 + dd(_c, _d, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, _a, _b) + 10 + dd(a, b, _c, _d) + 10 + dd(c, d, xHome, yHome)); //ef.cd.ab ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, c, d) + 10 + dd(_c, _d, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, c, d) + 10 + dd(_c, _d, _a, _b) + 10 + dd(a, b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, _c, _d) + 10 + dd(c, d, a, b) + 10 + dd(_a, _b, xHome, yHome)); ans = min(ans, dd(xMe, yMe, _e, _f) + 10 + dd(e, f, _c, _d) + 10 + dd(c, d, _a, _b) + 10 + dd(a, b, xHome, yHome)); return (int)ans; } };
Waiting My Proof.
我没想好怎么来证明这个命题,这道题我做错了。
我“抄袭了”代码,我在分析其原理时,试图证明其正确性,却发现有些地方说的有些勉强,还不具说服力。
暂时只贴个代码在这里。
class BinaryCards { public: long long largestNumber(long long A, long long B) { long long ret = 0LL; for(int i = 63; i >= 0; --i) { ret |= A & (1LL << i); ret |= B & (1LL << i); if( (A ^ B) & (1LL << i) ) { ret |= (1LL << i) - 1LL; break; } } return ret; } };