TopCoder——SRM 519 DIV 2

这场比赛没赶上,本以为是晚上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";
	}
	
};

Score600.

这题不知道可不可以归类为恶心的模拟题,因为思想很简单,如果有好的简便方法,我是没想出来了,因为在模拟比赛,时间短,我会直接照着赤裸裸的方法过。

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;
	}
};

Score900.

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;
	}
};




你可能感兴趣的:(c,String,vector,Class,div)