HSG THPT Thanh Hóa 2022 - EQLARRAY

Xem dạng PDF

Gửi bài giải


Điểm: 0,25 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: EQLARRAY.INP
Output: EQLARRAY.OUT

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho ~2~ dãy số nguyên ~a~, ~b~ đều gồm ~n~ phần tử. Ban đầu tất cả các phần tử của dãy ~a~ đều bằng ~0~. Cần biến dãy ~a~ thành dãy ~b~ bằng cách thực hiện một số lần thao tác sau:

  • Chọn ra ~k~ phần tử của dãy ~a~ và tăng mỗi phần tử thêm ~1~ đơn vị.

Yêu cầu: Kiểm tra xem có thể biến dãy ~a~ thành dãy ~b~ được hay không?

Input

Từ tệp văn bản EQLARRAY.INP gồm nhiều test có cấu trúc như sau:

  • Dòng đầu tiên của tệp chứa số nguyên dương ~Q~ là số test ~(1 \le Q \le 1000)~.

  • Tiếp theo là các test có cấu trúc như sau: Dòng đầu tiên của mỗi test chứa hai số nguyên dương ~n~ và ~k~ ~(1 \le k \le n \le 10^5)~.

  • Dòng thứ hai của mỗi test chứa dãy số nguyên ~b~ (~1 \le b_i \le 10^9, i = 1 \div n~).

Ràng buộc: Tổng các số ~n~ trong tất cả các test không vượt quá ~10^6~.

Output

Ghi ra tệp văn bản EQLARRAY.OUT với mỗi test, in kết quả trên một dòng, in "YES" nếu dãy ~a~ có thể biến thành dãy ~b~ và "NO" nếu ngược lại.

Sample Input 1

2
5 3
1 2 3 4 5
3 2
1 1 4

Sample Output 1

YES
NO

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 2
    YugiHackerKhongCopCode  đã bình luận lúc 25, Tháng 3, 2024, 13:50

    Bài y hệt tương tự: Free Contest 115 - TWOEARRAY


  • -3
    phongnq424  đã bình luận lúc 1, Tháng 2, 2024, 11:49

    Code này mình hơi đi không đúng đề lắm nhưng mình chưa thấy trường hợp nào lỗi, ai cho mình xin bộ test để code này lỗi với ạ!

    include <iostream>

    using namespace std;

    int main() { freopen("EQLARRAY.INP","r",stdin); freopen("EQLARRAY.OUT","w",stdout); int q, n, k, x; cin >> q; while (q--) { cin >> n >> k; int sum = 0, gtln = 0; for (int i=1; i<=n; i++) { cin >> x; sum += x; gtln = max(gtln,x); } if (gtln*k<=sum && sum%k==0) cout << "YES" << endl; else cout << "NO" << endl; } }


    • 1
      Lilinta  đã bình luận lúc 1, Tháng 2, 2024, 14:03

      Code của bạn bị tràn số khi tính tổng và gtln*k. Bạn có thể thay int thành long long nhé.


  • 0
    quandeptrai123  đã bình luận lúc 29, Tháng 1, 2024, 16:07

    hướng giải bài này là như nào ạ?


    • 16
      SunRise  đã bình luận lúc 2, Tháng 2, 2024, 14:14

      Spoil

      Nhận xét: Gọi s là tổng các phần tử trong mảng b

      Nhận xét 1: do b được tạo nên bởi hữu hạn lần k vậy nên s sẽ chia hết cho k, nếu không chia hết thì chắc chắn không thể tạo nên dãy b từ dãy a

      Nhận xét 2: dễ thấy để biến từ dãy a thành dãy b sẽ cần s / k lần

      Vậy nên phần tử lớn nhất dãy a có thể tạo được là s / k, nếu s / k bé hơn phần tử lớn nhất của dãy b thì cũng không tạo được dãy b từ dãy a