[KHTN - Thi thử TS10 #1 - 2026] Bài 2: MOVE

Xem dạng PDF

Gửi bài giải

Điểm: 5,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Một tuyến khảo sát địa hình được mô tả bằng lát cắt dọc, bắt đầu tại mốc cao độ 0. Trong quá trình di chuyển dọc theo tuyến, thiết bị ghi lại sự thay đổi cao độ bằng chuỗi ký hiệu:

  • '+': địa hình tăng cao 1 đơn vị
  • '-': địa hình giảm thấp 1 đơn vị
  • Chuỗi ký hiệu mô tả sự thay đổi cao độ liên tiếp giữa các điểm đo.

Yêu cầu: Hãy xác định chênh lệch cao độ lớn nhất giữa điểm cao nhất và điểm thấp nhất trên toàn tuyến khảo sát.

Input

  • Dòng đầu tiên chứa ~n~, số đoạn đo (~1 \le n \le 10^5~).
  • Dòng thứ hai chứa chuỗi gồm các ký tự '+' và '-'.

Output

In ra một số nguyên duy nhất là chênh lệch cao độ lớn nhất.

Sample Input 1

8
++-+-+--

Sample Output 1

2

Giải thích: Điểm cao nhất: 2; Điểm thấp nhất: 0.

Giới hạn

  • 30% số test có ràng buộc bổ sung: ~n \le 10~.
  • 30% số test khác có ràng buộc bổ sung: ~n \le 1000~.
  • 40% số test còn lại không có ràng buộc bổ sung.

Bình luận

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



  • 0
    khoa_KA06  đã bình luận lúc 7, Tháng 3, 2026, 15:35

    bài này bạn có thể sửa dụng prefix sum hoặc tính s

    đối với prefix sum

    n=int(input()) a=str(input()) pre=[0]*(n+1) for i in range(1,n+1): if a[i-1]=="+": pre[i]=pre[i-1]+1 else: pre[i]=pre[i-1]-1 print(max(pre)-min(pre))

    đây là code python


  • 0
    tikl20tok  đã bình luận lúc 7, Tháng 3, 2026, 12:23

    Code day nhe mn

    include<bits/stdc++.h>

    using namespace std;

    int main() { ios::syncwithstdio(false); cin.tie(NULL);

    long long n;
    cin>>n;
    long long tong=0;
    long long ln=0,nn=0;
    char c;
    long long i,j;
    for (i=1;i<=n;i++)
    {
        cin>>c;
        if (c=='+')
        {
            tong+=1;
        }
        else
        {
            tong-=1;
        }
        ln=max(ln,tong);
        nn=min(nn,tong);
    }
    cout<&lt;ln-nn;
    
    
    
    
    
    
    
    
    return 0;
    

    }


  • 0
    missmphuog  đã bình luận lúc 7, Tháng 3, 2026, 9:22
    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define ld long double
    
    #define pb push_back
    #define pf push_front
    #define fi first
    #define se second
    
    #define all(x) (x).begin(), (x).end()
    #define rall(x) (x).rbegin(), (x).rend()
    
    #define faster() ios::sync_with_stdio(false); cin.tie(nullptr);
    #define endl '\n'
    
    #define yes cout << "YES\n"
    #define no  cout << "NO\n"
    
    #define pii pair<int,int>
    #define pll pair<ll,ll>
    #define vi vector<int>
    #define vl vector<ll>
    const int maxn = 1e6;
    int main() {
        faster();
        int n; cin >> n;
        string s;
        cin>>s;
        int d=0;
        int mx=0,mn=0;
        for(char c:s) {
            if(c=='+')d++;
            else if(c=='-')d--;
            mx = max(mx, d);
            mn = min(mn, d);
            }
        cout << mx - mn;
        return 0;
    }
    
    

  • 0
    meobeo1009  đã bình luận lúc 31, Tháng 1, 2026, 12:49

    include <bits/stdc++.h>

    using namespace std; const int MAXN=1e5+5; char a[MAXN]; int main(){ iosbase::syncwithstdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for (int i=1;i<=n;++i) cin>>a[i]; vector<int> v(n+1,0); for (int i=1;i<=n;++i){ if (a[i]=='+') v[i]=v[i-1]+1; else if (a[i]=='-') v[i]=v[i-1]-1; } int ans=INTMIN; int cnt=INT_MAX; for (auto &x:v){ ans=max(ans,x); cnt=min(cnt,x); } cout<<ans-cnt<

    }