草体にぼ日記

だらだらと

12月10日 精進

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

problem

解法

写経ACで…って感じだけど、結局、

a1,a2,...anまでのn枚と

b1枚のc1,b2枚のc2,......bn枚のcn枚

この中からおおきい順にn枚取ればいい。 天才か???

ABC085 D- Katana Thorower

problem

 解法

(の前に)昨日、刀を作る動画を見ていました。 日本刀、厨二心をくすぐられていいですよね。

僕的に言えば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

problem

解法

気づく 白白白白黒黒黒 白白白白白白白 黒黒黒黒黒黒黒 のどれかのパターンにすればいいことに。

累積和っぽい?ってか僕は累積和だとかんがえた

D - Rain Flows into Dams

problem

解法

Nが偶数だと、答えが一意に定まらないらしい(ちょっとわかる)

山i に降った雨の量をxiとする。

条件より、a[i] = x[i] / 2 + x[i+1] / 2;

problem