AtCoder Beginner Contest 153解いてみた

c++, 競プロ, 雑談atcoder, c++, 競プロ

広告

A問題

A問題では、HPが0になるまで、ダメージを減らしていくというものでした。
なので、標準入力からHPと1回あたりのダメージ量を受け取り、0以下になルマで、無限ループで回し、カウントをしていくという事で解くことができます。
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <utility>
using namespace std;
using ll = long long;
 
int main() {
    ll h,a;
    cin >> h >> a;
    ll count =0;
    while (1) {
        if (h <=0) break;
        h = h - a;
        count++;
    }
    cout << count << endl;
    return 0;
}

B問題

B問題は、同じ必殺技を使うことができないので、最大のダメージ量は、全ての必殺技を1回ずつ足した値になります。その値が、HP以上であれば確実に倒すことができるので、最終的にその条件で出力をYesNoを切り替えれば良いことになります。
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <utility>
using namespace std;
using ll = long long;
 
int main() {
    ll h,n;
    cin >> h >> n;
    vector <ll> a(n);
    ll sum = 0;
    for (ll i = 0; i < n; i++) {
        cin >> a[i];
        sum+= a[i];
    }
    if (sum >= h) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}

C問題

c問題では、標準入力で受け取った値を昇順にソードして、値の大きいものを必殺技で倒すようにするために、必殺技の使える回数分要素を消していきます。その後、それぞれの
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <utility>
using namespace std;
using ll = long long;
 
int main() {
    int n,k;
    cin >> n >> k;
    vector <ll> h(n);
    for (int i = 0; i < n; i++) {
        cin >> h[i];
    }
    if (n <= k ) {
        cout << 0 << endl;
        return 0;
    }
    sort(h.begin(),h.end());
    while (k>0) {
        h.pop_back();
        k--;
    }
    ll count = 0;
    for (int i = 0; i < h.size(); i++) {
        count+= h[i];
    }
    cout << count << endl;
    return 0;
}

広告