Chào mọi người, hôm nay mình rảnh không có gì làm nên mới lôi lại cái đề thi kỹ thuật lập trình hồi năm nhất thi ra giải.

Lúc đó, mình còn gà lắm, giải được cũng chỉ được 1 bài thôi, hên trong lúc thi có bạn bè chỉ, rồi mình cũng đem bài đó đi cứu mấy đứa khác :)). Vì lúc đó làm không được nên hôm nay quyết tâm ngồi giải thử mình có thể giải được bao nhiêu bài.

Bắt đầu với bài 1 nhé:

Bài 1: (3 điểm)

Cho mảng $a$ gồm $n$ số nguyên với $a[i]$ biểu diễn hệ số của $x^i$ trong đa thức:

\[f(x) = \sum_{i=0}^{n-1} a[i]*x^i\]

và mảng $b$ gồm $m$ số nguyên với $b[j]$ biểu diễn hệ số của $x^j$ trong đa thức:

\[g(x) = \sum_{j=0}^{m-1} b[j]*x^j\]

Viết chương trình in ra mảng $c$ với $c[i]$ biểu diễn hệ số của tích hai đa thức trên sau khi đã rút gọn

\[h(x) = f(x) * g(x) = (\sum_{i=0}^{n-1} a[i]*x^i) * (\sum_{j=0}^{m-1} b[j]*x^j) = \sum_{k=0}^{p} c[k]*x^k\]

Dữ liệu vào:

  • Dòng đầu tiên gồm $n$ và $m$ là số phần tử của mảng $a$ và $b$

  • Hai dòng tiếp theo, mỗi dòng là các phần tử của mảng $a$ và $b$

Dữ liệu ra:

  • Các phần tử của mảng $c$

Ràng buộc:

  • $1 <= m, n <= 20$

  • $-10 <= a[i], b[i] <= 10$

  Dữ liệu vào Dữ liệu ra
Ví dụ 3 4
1 0 1
1 2 0 1
1 2 1 3 0 1
Giải thích $f(x) = 1 + x^2,\quad g(x) = 1 + 2x + x^3$
$h(x) = (1 + x^2)(1 + 2x + x^3) = 1 + 2x + x^2 + 3x^3 + x^5$
 

Cách giải:

/**
 *    newbie: ndhoc
 *    created: 2026-06-08 20:32:29
**/
#include <bits/stdc++.h>
using namespace std;

#define ll long long

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int m, n; cin >> m >> n;
    vector<int> a(m), b(n);

    for(int i=0; i<m; ++i) cin >> a[i];
    for(int i=0; i<n; ++i) cin >> b[i];   
    
    int p = m+n-1;
    vector<int> c(p);

    for(int i=0; i<m; ++i) {
        for(int j=0; j<n; ++j) {
            c[i+j] += a[i]*b[j];
        }
    }

    for(int i=0; i<p; ++i) cout << c[i] << " ";
    return 0;
}

Bài 2: (4 điểm)

Cho ma trận $a$ kích thước $m * n$ $(2 < m, n < 50)$ gồm các số nguyên dương. Cho biết $a[i][j]$ mô tả giá thuê vị trí $(i, j)$ để đặt gian hàng $(a < a[i][j] < 100)$. Một công ty cần thuê 4 gian hàng cạnh nhau theo hàng ngang, hoặc theo hàng dọc, hoặc theo ô vuông $2*2$. Cho biết số tiền tối thiểu công ty phải trả để thuê được gian hàng theo mong muốn.

Dữ liệu vào:

  • Dòng đầu tiên là hai số nguyên dương, lần lượt là $m, n$ biểu diễn theo kích thước của ma trận $a$ ($m$ dòng, $n$ cột).

  • $m$ dòng tiếp theo, mỗi dòng là n số nguyên (mỗi số cách nhau một khoảng trắng) lần lượt là n phần tử của từng dòng tương ứng của ma trận.

Dữ liệu ra: Số tiền tối thiểu công ty phải trả để thuê được 4 gian hàng theo yêu cầu.

  Dữ liệu vào Dữ liệu ra Giải thích
Ví dụ 3     4
9     4     5     9
2     6     2     8
5     7     1     6
16


Số tiền tối thiểu công ty phải trả là khi thuê các gian hàng được in đậm ở mảng trên.

Cách giải:

Bài 3: (1.5 điểm)

Cho mảng $a$ gồm $n$ số nguyên. Cho biết số phần tử tối thiểu mà tổng của chúng lớn hơn tổng các phần tử còn lại của mảng.

Dữ liệu vào:

  • Dòng đầu tiên gồm số nguyên dương $n$ là phần tử của mảng $a$.

  • Dòng tiếp theo gồm $n$ số nguyên lần lượt là giá trị của các phần tử trong mảng.

Dữ liệu ra:

  • Số phần tử tối thiểu theo mô tả trên.

Ràng buộc:

  • $1 <= n <= 100$
  • $-100 <= a[i] <= 100$
Dữ liệu vào Dữ liệu ra
Ví dụ 4
4 2 5 1
2
Giải thích Tập con {4, 5} hoặc {2, 5} là các tập con có 2 phần tử mà tổng của chúng lớn hơn tổng các phần tử còn lại. Tập con chỉ một phần tử có tổng lớn nhất là 5, bé hơn tổng các phần tử còn lại là 7.

Cách giải:

Bài 4: (1.5 điểm)

Cho biết bạn có thể thực hiện một trong hai thao tác sau nhiều lần trên mảng $a$ gồm $n$ số nguyên.

  • Chọn $a[i]$, bạn thu được $a[i]$ điểm

  • Chọn $a[i]$ và $a[i+1]$, thu được $a[i]*a[i+1]$ điểm

Khi một số đã được chọn, nó sẽ bị bỏ ra và không thể được chọn lại. Bạn cần thực hiện các thao tác sao cho số điểm đạt được là lớn nhất.

Dữ liệu vào:

  • Dòng đầu tiên gồm số nguyên dương $n$ là phần tử của mảng $a$.

  • Dòng tiếp theo gồm $n$ số nguyên lần lượt là giá trị của các phần tử trong mảng.

Dữ liệu ra:

  • Điểm số lớn nhất có thể đạt được (bạn có thể không chọn một số phần tử).

Ràng buộc:

  • $1 <= n <= 100$
  • $-9 <= a[i] <= 9$
Dữ liệu vào Dữ liệu ra
Ví dụ 9

-4 1 1 8 7 3 -3 -2 2
69
Giải thích Bạn sẽ lần lượt chọn a[1], a[2], (a[3], a[4]), a[5], (a[6], a[7]), và a[8].
Điểm số thu được là 1 + 1 + 8 * 7 + 3 + (-3) * (-2) + 2 = 69.

Cách giải: