Particle

競技プログラミングについての雑記

SRM536 Div2

いつもより、読解が大変だった。あと、easyで中括弧忘れに気づくのに時間が掛かり過ぎたりしてたから、気を付けなければならない

Easy
与えられた方程式にx=0,1を代入して、f(x)が偶数になるxの個数を求めます。
x=0の場合は、a[0]のみを考えればよく、x=1の場合は和を考えれば良い(XORでも良い)だけですが、英語できない人だと読解に時間がかかります。

class BinaryPolynomialDivTwo{
public:
	int countRoots(vector <int> a) {
		int len = a.size();
		int p0 = 1-a[0],p1 = 1; 
		for(int i = 0; i < len; i++){
			p1 += a[i];
		}
		p1%=2;
		return p0+p1;
	}
};

Medium
サイコロが最小で何面なのかを求める問題です。おそらく。
ソートすれば最小になる場合になることが分かれば解けます。

class RollingDiceDivTwo{
public:
	int minimumFaces(vector <string> rolls) {
		int len = rolls.size(),len2 = rolls[0].size(),res = 0;
		for(int i = 0; i < len; i++){
			sort(rolls[i].begin(),rolls[i].end());
		}
		
		for(int i = 0; i < len2; i++){
			int memo = 0;
			for(int j = 0; j < len; j++){
				memo=max(memo,rolls[j][i]-48);
			}
			res += memo;
		}
		
		return res;
 	}
};

Hard
k個以上の数字を選び、選んだ数字を消去して、代わりに選んだ数字の平均を追加する操作を繰り返し、最後に数字を1つにする。このときの数字の最大値を求める。ちょっと説明が足りないかもしれない。
ソートするところまでは分かったけど、DP出来なかった。




203.42 + 363.09 + 0.00 = 566.51

Rating 1023 -> 1025