Eaxy(250)
配列が与えられたとき、抜けている数字の個数を返す問題。
int minDucks(vector <int> ducks) {
int l = ducks.size(), x;
sort(ducks.begin(),ducks.end());
x = ducks.back() - ducks.front() + 1;
x = x - l;
return x;
}
これはもうソートして最大値と最小値から全体を求めて配列の要素を引いて…落ち着いてやればもうちょっとだけ点数伸びたかもしれない。
Medium(600)
Mediumは600点問題。
チェーンを繋げていって最も輝く部分の輝きを求めろ見たいな問題。
int maxBeauty(vector <string> chains) {
int ans = 0;
int i,j,k,x,m;
string chc(3,'.');
int l = chains.size();
int cc[50][3];
bool f = true;
for(i = 0; i < l; i++){
cc[i][0] = cc[i][1] = cc[i][2] = 0;
if((chains[i][lef] != '.') && (chains[i][rig] != '.') && (chains[i][cen] != '.') ){
cc[i][cen] = chains[i][0] + chains[i][1] + chains[i][2] - ('0' * 3);
continue;
}
if(chains[i][lef] != '.'){
k = chains[i][lef] - '0';
if(chains[i][cen] != '.')
k += chains[i][cen] - '0';
cc[i][lef] = k;
}
if(chains[i][rig] != '.'){
k = chains[i][rig] - '0';
if(chains[i][cen] != '.')
k += chains[i][cen] - '0';
cc[i][rig] = k;
}
}
k = j = m = 0;
for(i = 0; i < l; i++){
ans += cc[i][cen];
}
if(ans == 0)
f = true;
for(i = 0; i < l; i++)
if(j < cc[i][rig]){
j = cc[i][rig];
m = i;
}
for(i = 0; i < l; i++){
if(i == m)
continue;
if(k < cc[i][lef])
k = cc[i][lef];
}
x = j + k;
j = k = m = 0;
for(i = 0; i < l; i++)
if(j < cc[i][lef]){
j = cc[i][lef];
m = i;
}
for(i = 0; i < l; i++){
if(i == m)
continue;
if(k < cc[i][rig])
k = cc[i][rig];
}
if(x < j + k)
x = j + k;
ans = ans + x;
if(f){
for(i = 0; i < l; i++){
if(chains[i][cen] != '.')
if(ans < (chains[i][cen] - '0'))
ans = chains[i][cen] - '0';
}
}
return ans;
}
超スパゲティー。どうやって実装すればいいか分からなかったから配列に計算値を全部突っ込んだ。
しかしなぜかjとkを初期化した後にxに代入していた(↑のコードは一応修正後)ため、{"7.8"}というデータを喰らってチャレンジで落ちた。
多分これシステムテストも通らないと思うけどね。
ちなみに3つのリングが全て輝いてるチェーンが存在しないパターンを明らかに含めてないプログラムがあったので、チャレンジで{"1.1",".9.","1.1"}みたいなことやって撃墜したでござる。
ブルーコーダーになってた。
0 件のコメント:
コメントを投稿