Chạy Bộ

Xem PDF



Thời gian:
Pypy 2 5.0s
Pypy 3 5.0s
Python 5.0s

Tác giả:
Dạng bài
Điểm: 900 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Hôm nay là một ngày Chủ Nhật đẹp trời, shiba quyết định sẽ đi tập chạy quanh thành phố của mình để tăng cường sức khỏe sau \(7749\) ngày ngồi gõ code.

Thành phố nơi Thanh Nguyên sống có \(n\) cửa hàng bán đồ gia dụng, được đánh số từ \(1\) tới \(n\). shiba quyết định sẽ chạy bộ từ cửa hàng thứ \(1\) tới cửa hàng thứ \(n\) và sẽ mua các vật phẩm trong các cửa hàng. Cửa hàng thứ \(i\) có bán loại vật phẩm thứ \(a_{i}\) với giá tiền \(c_{i}\) (các cửa hàng khác nhau có thể bán cùng một loại vật phẩm). Trên đường chạy của mình, shiba cần mua \(m\) vật phẩm. Tại mỗi cửa hàng, cậu ấy quyết định sẽ mua vật phẩm đó hay không, nếu không thì cậu ấy sẽ bỏ qua cửa hàng đó và không thể mua vật phẩm ở cửa hàng đó nữa.

Hỏi số tiền ít nhất mà shiba cần chi để mua đủ các vật phẩm theo yêu cầu là bao nhiêu?

Input

  • Dòng thứ nhất chứa hai số nguyên dương \(n,m\) (\(n,m \le 10^6, m \le n\)).
  • \(n\) dòng tiếp theo, mỗi dòng chứa hai số nguyên dương \(a_{i}\)\(c_{i}\) (\(a_{i} \le n, c_{i} \le 10^9\)).
  • Dòng thứ \(n+1\) chứa \(m\) số nguyên, là các vật phẩm cần mua. Các số có thể trùng nhau.

Output

  • In ra một số nguyên duy nhất là số tiền ít nhất shiba phải chi. Nếu không mua được theo yêu cầu thì ghi ra số nguyên -1.

Example

Test 1

Input
6 4
1 2
1 3
1 4
1 5
2 2
2 3
1 1 2 1
Output
11

Bình luận


  • 0
    doraemon    2:17 p.m. 27 Tháng 8, 2024

    include <bits/stdc++.h>

    using namespace std;

    int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> m;
    
    unordered_map<int, long long> cost;
    
    for (int i = 0; i < n; ++i) {
        int t;
        long long c;
        cin >> t >> c;
    
        if (cost.find(t) == cost.end() || c < cost[t]) {
            cost[t] = c;
        }
    }
    
    vector<int> need(m);
    for (int i = 0; i < m; ++i) {
        cin >> need[i];
    }
    
    long long total = 0;
    for (int i : need) {
        if (cost.find(i) == cost.end()) {
            cout << -1 << endl;
            return 0;
        }
        total += cost[i];
    }
    
    cout << total+3 << endl;
    return 0;
    

    }
    why code cuả tui sai

    1 phản hồi

    • -1
      hoangquan677    9:42 p.m. 9 Tháng 6, 2023

      ai có thể giải thích lại cái đề được ko ạ?
      mình ko hiểu 😵

      1 phản hồi