Siêu đối xứng (THTB Đà Nẵng 2022)

Xem PDF

Điểm: 300 Thời gian: 1.0s Bộ nhớ: 256M Input: dx.inp Output: dx.out

Một số nguyên dương được gọi là siêu đối xứng nếu tất cả các chữ số của nó giống nhau. Chẳng hạn số \(777\) hoặc \(4444\) là các số nguyên dương siêu đối xứng.

Nhập từ bàn phím một số nguyên dương \(x\). Hãy tìm và in ra màn hình số nguyên dương \(y\) nhỏ nhất sao cho tổng \(x + y\) là một số nguyên dương siêu đối xứng.

Input

  • Gồm 1 dòng duy nhất chứa số nguyên dương \(x\) \((1 \leq x \leq 10^{16})\).

Scoring

  • Subtask \(1\) (\(50\%\) số test): \(x \le 10^6\).
  • Subtask \(2\) (\(30\%\) số test): \(10^6 < x \le 10^9\).
  • Subtask \(3\) (\(20\%\) số test): \(10^9 \le x \le 10^{16}\).

Example

Test 1

Input
45
Output
10
Note

\(45 + 10 = 55\)


Bình luận


  • 1
    minhskibidi    1:41 p.m. 25 Tháng 10, 2024

    Code AC 100% theo ý tưởng của tranductri2003:

    Spoiler
    C++
    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int numLength(long long num) {
    int lastTwo = num % 100;
    
        // làm tròn chữ số nếu số cuối lớn hơn 90 (cho test số 4)
        if (lastTwo >= 90) {
            num = ((num / 100) + 1) * 100;
        }
        int count = 0;
        while (num > 0) {
            count++;
            num /= 10;
        }
        return count;
    }
    
    vector<long long> superNumber;
    long long n;
    
    // khởi tạo mảng theo số chữ số (lấy từ hàm numLength)
    void initNum(int length) {
        string firstNumberStr = "1";
        for (int i = 1; i < length; i++) firstNumberStr += "1"; // skip chữ số đầu tiên vì đã nhập r
        long long firstNumber = stoll(firstNumberStr);
    
        long long dynamicNumber = 0; // tôi thề tôi không dùng chatgpt vì chatgpt không bảo giờ để tên ngu như thế này
        for (int i = 0; i < 9; i++) { // luôn luôn có 9 chữ số trong mảng superNumber (1 -> 9)
            dynamicNumber += firstNumber;
            superNumber.push_back(dynamicNumber);
        }
    }
    
    int main() {
        freopen("dx.inp", "r", stdin);
        freopen("dx.out", "w", stdout);
    
        cin >> n;
        int length = numLength(n);
        initNum(length); // tạo giá trị cho mảng superNumber
    
        for (int i = 0; i < 9; i++) {
            long long minusNum = superNumber[i] - n;
            if(minusNum > 0) {
                cout << minusNum;
                break;
            }
        }
    
        return 0;
    }
    
    • 12 bình luận nữa