B. Dũng sĩ dragon


Submit solution

Points: 100
Time limit: 1.0s
Memory limit: 256M

Problem type

Tý rất mê trò chơi điều khiển nhân vật Hiccup của mình chiến đấu cùng với những con rồng, vượt qua tất cả sẽ nhận được chứng chỉ dũng sĩ dragon. Hiccup chỉ có thể vượt qua 1 con rồng nếu như chỉ số chiến đấu của cậu lớn hơn chỉ số chiến đấu của con rồng đó, và sau khi giành chiến thắng chỉ số chiến đấu của cậu sẽ tăng thêm một mức nhất định tùy vào con rồng mà cậu đánh bại.

Tý muốn biết liệu Hiccup có thể nhận được chứng chỉ không? Bạn hãy lập trình giúp Tý trả lời câu hỏi.

Đầu vào

  • Dòng đầu tiên gồm 2 số nguyên \(s\) và \(n\), trong đó \(n\) là số con rồng Hiccup cần phải vượt qua \((1 ≤ n ≤ 10^3)\) và \(s\) là chỉ số chiến đấu ban đầu của Hiccup \((1 ≤ s ≤ 10^4)\).
  • \(n\) dòng tiếp theo, dòng thứ \(i\) chứa cặp số \((x[i], y[i])\). Trong đó \(x[i]\) là chỉ số chiến đấu của con rồng thứ \(i (1 ≤ x[i] ≤ 10^4)\), \(y[i]\) là mức tăng chỉ số cho Hiccup nếu cậu đánh bại nó \((0 ≤ y[i] ≤ 10^4)\).

Kết quả

  • In ra YES nếu Hiccup nhận được chứng chỉ dũng sĩ dragon.
  • Trường hợp ngược lại thì:
  • *Dòng 1 ghi NO nếu Hiccup không nhận được chứng chỉ dũng sỹ dragon.
  • *Dòng 2 đưa ra số lượng rồng còn lại chưa bị tiêu diệt.

input

2 2
1 99
100 0

output

YES

input

10 1
100 100

output

NO
1

Một trong các cách giải quyết bài này là sử dụng kiểu Pair, bạn hãy đọc nội dung bên dưới trước khi làm bài

1. Kiểu Pair

pair nằm trong thư viện "utility" được sử dụng để kết hợp 2 kiểu dữ liệu với nhau, nó cung cấp cách lưu trữ 2 giá trị đi kèm nhau nhưng chỉ sử dụng 1 biến.

Lưu trữ dữ liệu theo cặp và có những đặc điểm sau :

Phần tử thứ nhất của pair được gọi là first, phần tử thứ 2 của pair được gọi là second
Bạn có thể so sánh, gán, copy pair như kiểu dữ liệu bạn thường gặp
Để truy cập vào phần tử thứ nhất và thứ 2 trong pair ta sử dụng toán tử dấu chấm

Trong ví dụ này: Chúng ta sử dụng vector pairs để lưu các pair có hai thành phần là số nguyên.
Chúng ta nhập vào số lượng pair, sau đó nhập giá trị cho mỗi pair.
Để sắp xếp các pair theo giá trị của phần tử đầu tiên trong pair, chúng ta sử dụng sort và truyền vào hai iterator đầu và cuối của vector, cùng một hàm so sánh mặc định của pair.
Sau khi sắp xếp, chúng ta in ra các pair đã sắp xếp.

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<pair<int, int>> pairs;

    // Nhập các phần tử cho các pair
    int n;
    cout << "Nhập số lượng pair: ";
    cin >> n;

    for (int i = 0; i < n; ++i) {
        int x, y;
        cout << "Nhập giá trị cho pair " << i + 1 << ": ";
        cin >> x >> y;
        pairs.push_back({x, y});
    }

    // In ra các pair sau khi nhập
    cout << "Các pair sau khi nhập:\n";
    for (const auto& p : pairs) {
        cout << "(" << p.first << ", " << p.second << ")" << endl;
    }

    // Sắp xếp các pair theo giá trị phần tử đầu tiên
    sort(pairs.begin(), pairs.end());

    // In ra các pair sau khi sắp xếp
    cout << "Các pair sau khi sắp xếp theo giá trị phần tử đầu tiên:\n";
    for (const auto& p : pairs) {
        cout << "(" << p.first << ", " << p.second << ")" << endl;
    }

    return 0;
}
Trong ngôn ngữ lập trình C++, câu lệnh const auto& p sử dụng để khai báo một biến tham chiếu không thay đổi (const) có kiểu dữ liệu được suy luận (auto) từ ngữ cảnh, và tham chiếu tới một đối tượng được lặp qua trong vòng lặp.

Dưới đây là một giải thích chi tiết từng phần trong câu lệnh const auto& p:

const: Điều này chỉ ra rằng biến p được khai báo là không thể thay đổi. Khi sử dụng const, giá trị của biến p không thể được thay đổi sau khi được khởi tạo. Điều này giúp đảm bảo rằng giá trị của p trong vòng lặp không bị thay đổi không cần thiết.

auto: Điều này cho phép kiểu dữ liệu của biến p được suy luận tự động từ kiểu dữ liệu của đối tượng mà p tham chiếu tới. Trong trường hợp này, auto sẽ giúp gán kiểu dữ liệu chính xác cho p dựa trên kiểu dữ liệu của đối tượng mà nó chạy qua trong vòng lặp.

&: Đây là một tham chiếu đến đối tượng được lặp qua trong vòng lặp. Việc sử dụng tham chiếu giúp tránh việc sao chép không cần thiết của đối tượng và làm giảm tải cho hệ thống. Tham chiếu cho phép truy cập đến đối tượng gốc mà không cần sao chép nó.

Comments

There are no comments at the moment.