Dãy số cân bằng

Xem dạng PDF

Gửi bài giải

Điểm: 0,01 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

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

Cho dãy gồm ~n~ số nguyên dương ~a_1, a_2, \ldots, a_n~. Ban dãy ~a~ thỏa mãn điều kiện ~a_1 \le 2\cdot a_i~ với mọi ~2 \le i \le n~. Đây được gọi là điều kiện cân bằng của dãy ~a~.

Được phép thực hiện dãy các tác sau không hoặc nhiều lần:

  • Chọn chỉ số ~i~ (~2 \le i \le n~) và số nguyên ~x~ sao cho ~x \le a_i~.

  • Thực hiện biến đổi ~a_1 \gets a_1 + x~ và ~a_i \gets a_i - x~.

  • Sau phép biến đổi, điều kiện cân bằng của mảng ~a~ phải được thỏa mãn.

  • ~x~ được gọi là điểm số cho thao tác này.

Tìm tổng điểm số lớn nhất có thể sau khi thực hiện thao tác trên không hoặc nhiều lần.

Input

Bộ dữ liệu gồm nhiều test case. Dòng đầu tiên của bộ dữ liệu chứa số nguyên dương ~t~ (~1 \le t \le 100~) là số lượng test case. Mô tả của mỗi test case như sau.

Dòng đầu tiên chứa số nguyên ~n~ (~2 \le n \le 200\,000~) — độ dài dãy ~a~.

Dòng thứ hai gồm ~n~ số nguyên ~a_1, a_2, \ldots, a_n~ (~1 \le a_i \le 10^9~, ~a_1 \le 2 a_i~ với mọi ~2 \le i \le n~).

Dữ liệu đảm bảo rằng tổng ~n~ trong tất cả các test case không quá ~2 \cdot 10^5~.

Output

Với mỗi test case, hãy in ra tổng điểm số tối đa có thể đạt được sau khi thực hiện thao tác không hoặc vài lần.

Scoring

Subtask Điểm Ràng buộc
1 ~250~ ~n \le 100~, ~a_i \le 100~
2 ~250~ Không có ràng buộc gì thêm
Tổng ~500~

Sample Input 1

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

Sample Output 1

2
7
0

Notes

Với testcase thứ nhất, tổng điểm số tối đa có thể đạt được là ~2~:

  • ta có ~x = 1~ điểm khi chọn ~i = 2~. Lúc này ta có dãy ~a = [3, 2, 4]~

  • ta có ~x = 1~ điểm khi chọn ~i = 3~. Lúc này ta có dãy ~a = [4, 2, 3]~.

Với testcase thứ hai, tổng số điểm ta có thể đạt được là ~7~ bằng cách chuyển ~x = 7~ điểm từ vị trí ~i = 2~. Ta thu được dãy ~a = [8, 4]~.

Ở test case thứ ba, ta không có cách tăng điểm nào để thỏa mãn điều kiện cân bằng của dãy ~a~.


Bình luận

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



  • 0
    HaoHaoChuaCay  đã bình luận lúc 16, Tháng 8, 2024, 2:30

    Các đại lão giúp em với, sao code của em full sub 2 mà sai hết sub 1 ạ

    include<bits/stdc++.h>

    define endl '\n'

    using namespace std; typedef long long ll; ll t,n,i,x,a1,res,mi,ma; ll sum; int main() { iosbase::syncwithstdio(0); cin.tie(0);cout.tie(0); cin>>t; while(t--) { sum=0;mi=INTMAX;ma=0; cin>>n; cin>>a1; for(i=1;i<n;i++) { cin>>res; sum+=res; if(res<mi)mi=res; if(res>ma)ma=res; } sum-=(1LLmi(n-1)); x=2*mi-a1; if(n==2) { cout<<x/3<<endl continue if cout while sum x-="2;" return> </endl>


  • 0
    dunglevc2810  đã bình luận lúc 13, Tháng 8, 2024, 14:30 sửa 4

    ai giúp em xem code em sai ở đâu với ạ

    include<bits/stdc++.h>

    using namespace std;

    define MOD 1000000007

    define maxn 1000006

    define for0n for(int i=0; i<n; i++)

    typedef long long ll;

    void tc(){ int n; cin >> n; ll a[n]; for0n{cin >> a[i];}

    sort(a+1, a+n); ll L=2*a[1], d=L-a[0]; ll p=0; for(int i=n-1; i>1; i--){ a[0]+=a[i]-a[1]; if(L-a[0]<=0){cout << d << endl; return;} else {p+=a[i]-a[1];} } d=L-a[0]; if(d>=3){ ll k=d/3; p+=k; } cout << p << endl; }

    int main(){ ios::syncwithstdio(false); cin.tie(0); cout.tie(0);

    int t; cin >> t; while(t--){ tc(); } }

    >