Trang chủ Tin Học Lớp 10 Free Contest 83 INCEQUAL Cho một dãy số 4 độ...

Free Contest 83 INCEQUAL Cho một dãy số 4 độ dài N. Ta có thể thực hiện thao tác sau: chọn một phần tử trong dãy, và tăng giá trị phần tử đó lên X. Hãy cho

Câu hỏi :

Cho e xin ý tưởng bài này với ạ . cpp

image

Free Contest 83 INCEQUAL Cho một dãy số 4 độ dài N. Ta có thể thực hiện thao tác sau: chọn một phần tử trong dãy, và tăng giá trị phần tử đó lên X. Hãy cho

Lời giải 1 :

Solution: 

Ta có những nhận xét sau:

- Để có số thao tác tăng là ít nhất thì ta phải tăng phần tử thứ a[i] thành phần tử lớn nhất trong mảng.

Cách làm:

- Gọi phần tử lớn nhất trong mảng là: k.

- Để biết được a[i] có thể tăng lên thành k hay không thì ta sẽ lấy (k - a[i]) % x.

(x đề bài cho trước)

+ Nếu  k - a[i] chia hết cho x thì tức là tăng được thì số lần tăng sẽ  += (k - a[i]) / x. 

+ Ngược lại là không tăng được thì kết thúc chương trình và in ra -1.

Code mẫu:

/* QUANG VIP PRO */

#include <bits/stdc++.h>
using namespace std;
int n, x, tmp, cnt, check;
int a[100010];
int main(){
    cin >> n >> x;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        tmp = max(tmp, a[i]);
    }
    for(int i = 1; i <= n; i++){
        if((tmp - a[i]) % x == 0)cnt += (tmp - a[i]) / x;
        else{
            check = 1;
            break;
        }
    }
    if(check == 1)cout << -1;
    else cout << cnt;
}

Lời giải 2 :

`*` Ý tưởng: Nhận thấy nếu tồn tại 1 cách biến đổi thoã mãn, thì số mà sau khi biến đổi tất cả các phần tử bằng nhau chính là số lớn nhất trong mảng.

$\texttt{C++}$

#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, ma = 0, x;
    cin >> n >> x;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) cin >> a[i], ma = max(ma, a[i]);
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        if ((ma - a[i]) % x != 0) {
            return cout << -1, 0;
        }
        else ans += (ma - a[i]) / x;
    }
    cout << ans;
    return 0;
}

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 10

Lớp 10 - Năm đầu tiên ở cấp trung học phổ thông, chúng ta sẽ có nhiều bạn bè mới đến từ những nơi khác nhau. Ngôi trường mới, xa nhà hơn, mở ra một thế giới mới với nhiều điều thú vị. Hãy mở lòng đón nhận và tận hưởng những trải nghiệm mới!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK