Dãy số cân bằng

View as PDF

Submit solution

Points: 0.01 (partial)
Time limit: 1.0s
Memory limit: 256M

Problem type
Allowed languages
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~.


Comments

Please read the guidelines before commenting.



  • 0
    HaoHaoChuaCay  commented on Aug. 16, 2024, 2:30 a.m.

    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<


  • 0
    dunglevc2810  commented on Aug. 13, 2024, 2:30 p.m. edit 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(); } }

    >