Tác giả:
Người kiểm thử:
Chiều ngày
Là một thí sinh của kỳ thi, mình có một số đánh giá độ khó của đề như sau:
Không dài dòng nữa, dưới đây là lời giải của cả
Cho số nguyên dương
Bài này chỉ đơn giản là cày trâu thôi, bạn duyệt các số nguyên dương từ
Độ phức tạp của ý tưởng trên là
def check(n):
st, ln = set(), 0
for i in str(n):
st.add(i)
ln += 1
if ln == len(st): return true
return false
n = int(input())
n += 1
while true:
if check(n) == true:
break
n += 1
print(n)
#Python 3.
Bài này là một bài rất cơ bản nên nếu bạn không giải được, bạn cần xem lại cách học tin của mình nhé. Còn nếu bạn skill issue mất điểm thì hết cứu thật rồi.
Cho xâu
Bài này thì không có gì để nói, ta chỉ cần bỏ các từ của xâu
Độ phức tạp của ý tưởng trên là
s = input().split()
pos, ln = 0, 0
for i in range(len(s)-1, -1, -1):
print(s[i], end = " ")
if len(s[i]) >= ln:
ln = len(s[i])
pos = i+1
print("")
print(pos)
#Python 3.
Bài này là một bài rất cơ bản nên nếu bạn không giải được, bạn cần xem lại cách học tin của mình nhé. Còn nếu bạn skill issue mất điểm thì hết cứu thật rồi.
Cho dãy
Subtask
Trước hết, ta sẽ nén lại các phần tử của dãy
Ta sẽ duyệt
Ngoài việc sử dụng Cây phân đoạn (Segment Tree) như trên, bạn vẫn có thể sử dụng Cây chỉ số nhị phân (Fenwick Tree) như mình khi ở trong phòng thi.
Độ phức tạp của ý tưởng trên tối đa sẽ là
#include <bits/stdc++.h>
#define ll long long
#define get_an_ac ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
const int lim = 100000;
ll bit[lim+5], a[lim+5]; vector<ll> com;
void update(int pos) {
while (pos <= lim) {
bit[pos]++;
pos += (pos&-pos);
}
}
ll query(int pos) {
ll res = 0;
while (pos > 0) {
res += bit[pos];
pos -= (pos&-pos);
}
return res;
}
int main() {
get_an_ac
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
com.push_back(a[i]);
}
sort(com.begin(), com.end());
ll ans = 0;
for (int i = n; i >= 1; i--) {
a[i] = lower_bound(com.begin(), com.end(), a[i])-com.begin()+1;
ans += query(a[i]-1);
update(a[i]);
}
cout << ans << "\n";
return 0;
}
Đây là một bài khá cơ bản nếu thí sinh đã biết Segment Tree và kĩ thuật nén số. Còn đối với các bạn không biết thì đây sẽ là một bài khó, tuy nhiên
Lúc đầu đọc bài này mà mình bất ngờ, do mình cứ nghĩ THT Thành phố Đà Nẵng ra kiến thức khó nhất cũng chỉ là Dp cơ bản thôi chứ bởi các đề năm trước thường ra như vậy (không có ý nghĩ khinh thường, chỉ là ý kiến cá nhân).
Cho dãy
Nhiệm vụ của bạn là tối đa hóa điểm số của mình.
Bài này mình chưa có cách giải chuẩn nên mình sẽ tạm để trống. Ở dưới là code của mình với độ phức tạp là từ
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define ll long long
#define lld long double
#define ull unsigned long long
#define left(a, v) lower_bound(a.begin(), a.end(), v)-a.begin()
#define right(a, v) upper_bound(a.begin(), a.end(), v)-a.begin()
#define print(a) for (auto const& x : a) cout << x << " "; cout << "\n";
#define get_an_ac ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
const ll lim = 1000; ll a[lim+5]{0}; lld dp[lim+5][lim+5];
lld dfs(ll l, ll r) {
lld ans = 0.0; if (l >= r) return 0.0;
if (dp[l][r] != -1) return dp[l][r];
for (ll x = l; x <= r; x++) {
if (a[x] != -1) {
ll tmp = a[x]; a[x] = -1;
if (a[x-1] == -1 && a[x+1] != -1) ans = max(ans, dfs(l, x-1)+a[x+1]+dfs(x+1, r));
if (a[x-1] != -1 && a[x+1] == -1) ans = max(ans, dfs(l, x-1)+a[x-1]+dfs(x+1, r));
if (a[x-1] != -1 && a[x+1] != -1) ans = max(ans, dfs(l, x-1)+1.0*(a[x-1]+a[x+1])/2+dfs(x+1, r));
a[x] = tmp;
}
} dp[l][r] = ans; return ans;
}
void solve() {
ll n; cin >> n; a[0] = a[n+1] = -1;
for (ll x = 1; x <= n; x++) {
cin >> a[x];
for (ll y = 1; y <= n; y++) dp[x][y] = -1.0;
} cout << setprecision(1) << fixed << dfs(1, n) << "\n";
}
int main() {
get_an_ac
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
ll t; cin >> t; while (t--) solve(); return 0;
}
Một số người kêu bài này khó, một số người kêu bài này dễ nhưng theo mình, đây là một bài khá hay và không dễ.
Căn cứ vào độ khó và kết quả từ miệng của các bạn thí sinh, mình dự đoán số điểm mà phần lớn các bạn sẽ đạt được là từ
Ưu điềm của đề:
Nhược điểm của đề:
Chỉ vậy thôi, chúc bạn thành công full đề THT Thành phố Đà Nẵng bảng B 2024 nhé.