548 div2
easy
カモかアヒルか忘れたけどカゴとかよくわからない訳だったのでそれっぽいのを書いた。
int minDucks(vector <int> du){ int ans = 0; int a[64] = {0}; for(int i = 0; i < du.size(); i++){ a[du[i]]++; } int t = 0; for(int i = 0; i < 51; i++){ if(a[i] > t){ t = a[i]; } } for(int i = 0; i < 51; i++){ if(a[i]!= 0){ ans += t; } } return ans; }
medium
王様が道路の横に植えた木の高さを魔法を使って良い感じにしていく感じ。
二分探索だった。if文の条件間違えててsystem落ちした。
int minLevel(vector <int> h){ int n = h.size(); int s = 0,mi = 0,ma = 1000000000; int flg = 1; int ans = 0; for(int i = 1; i < n; i++){ if(h[i] <= h[i-1]){ flg = 0; break; } } if(flg)return 0; while(mi <= ma){ s = (mi+ma)/2; int l[64] = {0}; flg = 1; l[n-1] = h[n-1] + s; for(int i = n-2; i >= 0; i--){ if(h[i] + s < l[i+1]){ l[i] = h[i] + s; }else if(h[i] - s < l[i+1]){ l[i] = l[i+1]-1; }else{ l[i] = h[i] + s; } } for(int i = 0; i < n; i++){ if(l[i] < 1){ flg = 0; } } for(int i = 1; i < n; i++){ if( l[i] <= l[i-1]){ flg = 0; break; } } if(flg){ ans = s; ma = s-1; }else{ mi = s+1; } } return ans; }
頭悪いのをどうにかしないと。