Topcoder SRM 569 div2
期末テストで参加できず。
プラクティスルームでといてみた。
結果
easy : 228.03
med : 440.11
hardとかチャレンジはしてない。出てれば42位くらいだったっぽい。
青になりたかったなぁ。
easy
students.size()は50なので、全探索すればいい。
class TheJediTestDiv2 { public: int countSupervisors(vector <int> students, int Y, int J) { int N = students.size(); //which yoda choose int minc = 1000000000; rep(i,N){ int cnt = 0; rep(j,N){ if(i==j){ int rest = students[j] - Y; cnt += max(0,(int)ceil(1.0*rest / J)); }else{ cnt += ceil(1.0*students[j] / J); } } minc = min(minc,cnt); } return minc; } };
med
ANDやOR,XORの表を書いて少し考えると、ある列に関して、1が二つ以上、0が一つ以上あれば十分であることがわかる。
class TheDeviceDiv2 { public: string identify(vector <string> plates) { int M = plates[0].size(); int N = plates.size(); bool ok = true; for(int i = 0;i<M;i++){ int one_cnt = 0,zero_cnt = 0; for(int j=0;j<N;j++){ if(plates[j][i] == '1') one_cnt++; else zero_cnt++; } if(one_cnt >= 2 and zero_cnt >= 1){ }else{ ok = false; } } if(ok) return "YES"; else return "NO"; } };
反省としては、もう少しはやくeasyを解けるべきだった。
やっぱ一文字変数やめなきゃだめかも。
medがこれくらいの速度で解けたのは割と満足かも。