12月10日
学校サボっちゃった(てへぺろ) でも猫は可愛いので許されます(んにゃ〜?)
まえがき
- 解いた問題
ABC127 D- Integer Cards
ABC085 D- Katana Thrower
Tenka1 Programmer Beginner Contest 2019
D - Rain Flows into Dams
ABC114 C-755
写経AC いつかもう一回やんねええと
ABC127 D- Integer Cards
解法
写経ACで…って感じだけど、結局、
a1,a2,...anまでのn枚と
b1枚のc1,b2枚のc2,......bn枚のcn枚
この中からおおきい順にn枚取ればいい。 天才か???
ABC085 D- Katana Thorower
解法
(の前に)昨日、刀を作る動画を見ていました。 日本刀、厨二心をくすぐられていいですよね。
僕的に言えばABC127 D- Integer Cardsの類題ですね!!!
int main() { cin >> n >> m ; // HP is m ; priority_queue<pair<int,int>> q; rep(i,n){ int a, b; cin >> a >> b; q.push(make_pair(a,5)); q.push(make_pair(b,1)); } int ans= 0 ; while(1){ auto p = q.top(); if(p.second == 1){ ans += 1; m -= p.first ; q.pop(); }else{ int num =( m + (p.first - 1) ) / p.first ; ans += num ; m -= num * p.first ; } if( m <= 0 ) break; } cout << ans << endl; }
刀を投げる行為が一回しかできないということだけに注意してpriority_queueを使って実装しました。 刀を投げるときは、p.second == 1で、一回だけモンスターに刀を投げつける。
(a,5)というのは、何回でも刀をふれるというのを表すためだけにテキトーに1以外の数字をいれました。
与えるダメージがおおきい順に、 投げ
投げ
投げ
振る
振る
投げ
振る
振る
みたいな感じになっているなら、とりあえず上から3つ、投げでモンスターにダメージを与える。 でその次の振るは振り続けるので、 モンスターの残りの体力を与えられるダメージで割ったときの小数点切り上げ 回 モンスターを切れば倒せる。
それぞれの刀について投げは一回しかできないようになっているので、ダメージを与える順番が、 投げ → 振るのようになっていますが、 その刀について 投げ と 振る をk回 するとき、 投げたあとk回振る。と見ても k回振ったあと 投げる と見ても 結局問題ない。
Tenka1 Programmer Beginner Contest 2019
解法
気づく 白白白白黒黒黒 白白白白白白白 黒黒黒黒黒黒黒 のどれかのパターンにすればいいことに。
累積和っぽい?ってか僕は累積和だとかんがえた
D - Rain Flows into Dams
解法
Nが偶数だと、答えが一意に定まらないらしい(ちょっとわかる)
山i に降った雨の量をxiとする。
条件より、a[i] = x[i] / 2 + x[i+1] / 2;