SRM532
英語の解釈が難しかった
DengklekTryingToSleep
Dengklekさんとあひるが今回の主役です。
あひるを数えてねるというのはどう考えても羊の間違いでしかありませんがおいておくとして、配列内の最小値から最大値まで1ずつ数えていったはずなのに漏れてる数がいくつかあるからその数をもとめよというものでした。
理解に時間がかかって240.38
class DengklekTryingToSleep { public: int minDucks( vector <int> ducks ) { sort(ducks.begin(), ducks.end()); set<int> sets; int res=0; for (int i=0; i<ducks.size(); i++) sets.insert(ducks[i]); for (int i=ducks[0]; i<=ducks[ducks.size()-1]; i++) { if (sets.count(i)==0) res++; } return res; } };
DengklekMakingChains
今度は長さ3の鎖をつなぎあわせて最大の価値になるような鎖を見つける問題です。
最初腐ってる鎖の条件を鎖のなかに同じ数字が二回以上出てることだと勘違いしてなにこれみたいになっていたのですが、10分くらいかかってようやく気づきました。
数字ドット数字の鎖の処理がいまいち微妙でWA。
なんか僕みたいな解き方してる人いなくてなんかテクニックあるんだなぁ〜とか思ったり思わなかったり
WAコード
class DengklekMakingChains { public: int maxBeauty( vector <string> chains ) { int res=0, maxr=0, maxl=0; vector<string> reserve; vector<int> num; for (int i=0; i<chains.size(); i++) { if (chains[i][0]!='.'&&chains[i][1]!='.'&&chains[i][2]!='.') { res+=(chains[i][0]-'0')+(chains[i][1]-'0')+(chains[i][2]-'0'); } else if (chains[i][0]=='.'&&chains[i][2]!='.') { int sum=chains[i][2]-'0'; if (chains[i][1]!='.') sum+=chains[i][1]-'0'; maxl=max(maxl,sum); } else if (chains[i][2]=='.'&&chains[i][0]!='.') { int sum=chains[i][0]-'0'; if (chains[i][1]!='.') sum+=chains[i][1]-'0'; maxr=max(maxr,sum); } else if (chains[i][0]!='.'&&chains[i][2]!='.') { reserve.push_back(chains[i]); } else if (chains[i][1]!='.') { num.push_back(chains[i][1]-'0'); } } int res2=0; if (num.size()!=0) { sort(num.begin(), num.end()); res2=num[num.size()-1]; } for (int i=0; i<reserve.size(); i++) { int l=reserve[i][2]-'0'; int r=reserve[i][0]-'0'; if (maxl<l&&maxr>=r) maxl=l; else if (maxl>=l&&maxr<r) maxr=r; else if (maxl<l&&maxr<r) { if (l-maxl>r-maxr) maxl=l; else if (l-maxl<r-maxr) maxr=r; else if (l<r) maxr=r; else maxl=l; } } return max(res+maxl+maxr,res2); } };
DengklekPaintingSquares
僕には難しいDPでした、ちゃんちゃん
結果
oxx 240.38 429st
1058->1048(-10)
でした。Div.1遠いですね、はい。