Hướng dẫn giải của [Ninh Bình - TS10 - 2024] Bài 2: Số lớn nhất


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.

Tác giả: noodles0428

Cốt lõi của bài này là lấy tất cả các số xuất hiện trong xâu rồi tìm số lớn nhất trong tập số đó.

Vậy, để lấy được số trong xâu, ta sẽ:

  • Kiểm tra xem liệu ký tự thứ ~i~ có phải là số hay không?
  • Nếu nó là số, ta sẽ kiểm tra xem liệu đây có phải là chữ số có nghĩa hay không?
  • Kiểm tra xem liệu ký tự số đang xét có phải là ký tự cuối cùng của dãy số đó hay không? Nếu có, hãy lấy max (tùy vào cách cài đặt) của số đó và reset lại biến tạm.

ĐPT: ~O~(~n~)

Code mẫu:

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

#define int long long
const int N = 1e6 + 9;

int a[N];
int n;

bool cmp(string &x, string &y) {
    if (x.size() != y.size()) {
        return x.size() < y.size();
    }
    else {
        return x < y;
    }
}

vector<string> v;

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    string s; cin >> s;
    string x = "";
    bool c0 = 0;
    string ans = "0";
    for (int i = 0; i < s.size(); i++) {
        if (isdigit(s[i])) {
            if ((c0 and s[i] == '0') or (s[i] != '0')) {
                x += s[i];
                c0 = 1;
            }
        }
        if (i != s.size() - 1) {
            if (isdigit(s[i]) and !isdigit(s[i + 1])) {
                if (cmp(ans, x) == 1) {
                    ans = x;
                }
                x = "";
                c0 = 0;
            }
        } else {
            if (isdigit(s[i])) {
                if (cmp(ans, x) == 1) {
                    ans = x;
                }
                x = "";
                c0 = 0;
            }
        }
    }
    cout << ans;
}

// <33

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.