Hướng dẫn giải của [VTT Q4 Contest 03] Bài 1: Lũy thừa [LUYTHUA]


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Mỗi số ~p_i~ gồm cơ số viết liền với chữ số mũ ở cuối. Chỉ cần tách rồi tính lũy thừa và cộng lại.

Sub 1: Tính trực tiếp — ~O(9n)~

Cơ số là ~p_i / 10~ (chia nguyên), số mũ là ~p_i \bmod 10~. Nhân cơ số với chính nó đúng "số mũ" lần (tối đa 9 lần) rồi cộng vào kết quả. Kết quả không vượt quá ~10^{18}~ nên dùng long long là đủ. Bài quá đơn giản, không có cách vét cạn nào khác hợp lý nên chỉ có một sub: đúng 10/10 test.

Chương trình hoàn chỉnh

Main đọc ~n~ số rồi gọi sub1 để tính và in kết quả.

#include <bits/stdc++.h>
using namespace std;

int n;
long long p[25];

// Chỉ 1 sub: bài chỉ là tách chữ số cuối làm số mũ rồi tính lũy thừa, không có vét cạn nào khác hợp lý.
void sub1() {
    long long res = 0;
    for (int i = 0; i < n; i++) {
        long long a = p[i] / 10;   // cơ số: bỏ chữ số cuối
        int x = p[i] % 10;         // số mũ: chữ số cuối
        long long t = 1;
        for (int k = 0; k < x; k++) t *= a;
        res += t;
    }
    cout << res << "\n";
}

int main() {
    freopen("LUYTHUA.INP", "r", stdin);
    freopen("LUYTHUA.OUT", "w", stdout);
    ios::sync_with_stdio(false); cin.tie(nullptr);
    cin >> n;
    for (int i = 0; i < n; i++) cin >> p[i];
    sub1();
}

Bình luận

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


Không có bình luận tại thời điểm này.