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
Bài
y hệttương tự: Free Contest 115 - TWOEARRAYCode 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; } }
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é.
hướng giải bài này là như nào ạ?
Spoil