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
Comments
Đọc test cái phải mất 10p mới hiểu đề =)))
Bài
y hệttương tự: Free Contest 115 - TWOEARRAYThis comment is hidden due to too much negative feedback. Show it anyway.
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
include<bits/stdc++.h>
using namespace std;
define ll long long
define nmax 100004
ll a[nmax]; int main() { ios::syncwithstdio(0); cin.tie(0);cout.tie(0); freopen("EQLARRAY.inp","r",stdin); freopen("EQLARRAY.out","w",stdout); ll n , t, s = 0, k , m = -1e18; cin >> t; while(t--){ m = -1e18; cin >> n >> k; for (int i =1; i <= n; i++){ cin >> a[i]; s+=a[i]; m = max(m , a[i]); } if (m <= s/k and s%k == 0){ cout << "YES" << endl; } else cout << "NO" << endl; } } code như này sao lại sai v ae