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.
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ả:
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