SRM485 Div2

2^10(1024)コーダーになった。250点落とした人みんなにごめんなさいしなきゃいけない回。

250 MicrowaveSelling

指定された範囲の中で、1099みたいに後ろにひっついてて連続してる'9'の数で最大のものを返す問題。

だったのだが、trailingの意味をよく考えずに『連続した9が多い一番多い値』的な判断してしまった。

がさらに驚くべきことに、ソース内のバグによりPassedSystemTestしてしまった。

245.06 Pt.

string itos(int n){
	stringstream ss;
	ss << n;
	return ss.str();
}

int check(int a){
	string s = itos(a);
	int r = 0;
	int mx = 0;
	//cout << s << endl;
	for(int i=0;i<s.length();i++){
		if(s[i]=='9')r++;
		else r = 0;
		mx = max(mx,r);
	}
	return r; // <- ここ、本当はmx返したいのにr返してる。これが偶然お尻の9の数になってPassedSystemTest.
}
class MicrowaveSelling {
public:
	int mostAttractivePrice(int minPrice, int maxPrice) {
		pair<int,int> ret;
		for(int i=maxPrice;i>=minPrice;i--){
			if(ret<make_pair(check(i),i)){
				ret = max(ret,make_pair(check(i),i));
				cout << ret.first << ">" << ret.second << endl;
			}
		}
 		return ret.second;
	}
};

500 AfraidOfEven

問題文読んで考える。倍数生成してバックトラックしていけばいいんじゃね→実装→FaildSystemTest

よく考えたら倍数生成するんじゃなくて*2していくんだった。終わってからしばらくして気づいた。

Faild System Test 0.0Pt.

(Practiceで通ったソース)

class AfraidOfEven {
public:
	vector<int> bt,seq,ret;

	void backTrack(int n){
		if( n>2 && bt[1]-bt[0] != bt[n-1]-bt[n-2]) return;
	
		if(bt.size() == seq.size())ret = bt;
		
		if(!ret.empty())return;
	
		int tmp = seq[n];
	
		while( tmp <= INT_MAX/2 ){
			bt.push_back(tmp),  backTrack(n+1),  bt.pop_back();
			tmp *= 2;
		}
	}
	
	vector <int> restoreProgression(vector <int> dummy_seq) {
		seq = dummy_seq;
		ret.clear(),  backTrack(0);
 		return ret;
	}
};

1000

開いたけど残り時間少なかったしよく分からないからやめた。

Compiled 0.0Pt.

Challenge Phase

怪しいNormalにテストケース飛ばしたら一人落とせた。

250点によく分からんテストケース送ったら失敗した。(8999≦n≦9990的なことがしたかったけど出来てなかったケース)

悔しい。

1 Successful - 50.Pt

1 UnSuccessful - (-25).Pt

Result

245.06 + 0.0 + 0.0 + 50.0 - 25.0 = 270.06Pt.

Division 2 165位.

レート kyuridenamida(967)→kyuridenamida(1024)