夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

過去問タイムアタック初日

今日からタイムアタック始めました!

なんだかんだでMMいじってパソコンに使っている時間が予定より長いですがさておき・・・
簡単にルールを。

1. 制限時間は一時間
2. 解いていないSRM Div.2 Easyを古い順にやっていく
3. 制限時間終了時に問題を解き終わっていないとき、コード書きかけていたならそこで終了。問題文だけ読んで終わった場合はclearし、明日に持ち越しとする。

まぁこんな感じ。

では今日の分です。初日から四問と上出来w

168

階段を駆け登る問題(笑)
条件に注意

class StairClimb {
   public:
   int stridesTaken(vector <int> flights, int stairsPerStride)
  {
  	int ans = 0;
	for (int i=0; i<flights.size(); i++) {
		if (flights[i]%stairsPerStride == 0) {
			ans += flights[i]/stairsPerStride;
		} else {
			ans += flights[i]/stairsPerStride+1;
		}
		if (i != 0 && i != flights.size()) ans += 2;
	}
	return ans;
  }
};

169

水泳選手が川を上り下りしました。スタート地点に戻る時間は?
行きが下り、帰りが上り。もしたどり着けないなら-1を返す。
解くだけ。

class Swimmers {
   public:
   vector <int> getSwimTimes(vector <int> distances, vector <int> speeds, int current)
  {
	vector <int> ans(speeds.size());
	double tmp1, tmp2;
	for (int i=0; i<speeds.size(); i++) {
		if (distances[i] == 0) {
			ans[i] = 0;
			continue;
		} else if (speeds[i] <= current) {
			ans[i] = -1;
			continue;
		}
		tmp1 = 1.0*distances[i]/(speeds[i]+current); tmp2 = 1.0*distances[i]/(speeds[i]-current);
		ans[i] = (int)(tmp1 + tmp2);
	}
	return ans;
  }
};

170

あるレベルに上がるために必要な経験値のリストが渡される。与えられた経験値から次のレベルにアップするにはあとどれだけの経験値が必要か?

「こんな問題で大丈夫か?」と聞かれ「大丈夫だ問題ない。」といってイーノックと同じ運命をたどる問題。

class LevelUp {
   public:
   int toNextLevel(vector <int> expNeeded, int received)
  {
  	int i=0, ans=0;
	while (expNeeded[i]<=received) i++;
	ans = expNeeded[i]-received;
	return ans;
  }
};

171

よくわからんが伝統のRPGという物が或って、ndx(n,xは自然数)って感じで渡されたとき、最大値と最小値と平均値を求める問題。

各々の最大値と最小値と平均値の求め方が書いてあるので、あとは文字列をうまく分解するだけ。
つまり読解ゲー

class RPG {
   public:
   vector <int> dieRolls(vector <string> dice)
  {
	vector <int> ans(3, 0);
	double tmp = 0.0;
	string f, l;
	int j, fn, ln;
	for (int i=0; i<dice.size(); i++) {
		f=""; l=""; j=0;
		while (dice[i][j] != 'd') {
			f += dice[i][j];
			j++;
		}
		j++;
		while (j < dice[i].length()) {
			l += dice[i][j];
			j++;
		}
		stringstream fs,ls;
		fs.str(f);
		fs >> fn;
		ls.str(l);
		ls >> ln;
		ans[0] += fn;
		ans[1] += fn*ln;
		tmp += 1.0*fn*(ln+1)/2;
	}
	ans[2] = (int)tmp;
	return ans;
  }
};