Giải nén xâu

Xem PDF

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong máy tính, để tiết kiệm bộ nhớ, người ta thường tìm cách nén dữ liệu. Trong việc nén văn bản, ta sư dụng một phương pháp đơn giản đươc mô tả thông qua ví dụ sau:

Ví dụ:

Với xâu ký tự: "aaaabbb" sẽ được nén lại thành xâu "4a3b". Với xâu ký tự "aaab" sẽ được nén lại thành "3ab".

Cho một xâu \(S\) gồm các ký tự thuộc tập \('a'...'z'\). Gọt \(St\) là xâu nén của xâu \(S\) theo phương pháp được mô tả như trên. Xâu \(St\) gồm \(N\) ký tự thuộc tập các ký tự \('a'...'z'\), \('0',...'9'\)

Hãy giải nén xâu \(St\) để được xâu gốc \(S\).

Input

  • Một xâu ký tự \(St\).

Output

  • Một xâu ký tự \(S\) sau khi giải nén.
  • Đề đảm bảo số lượng kí tự sau khi giải nén không quá \(10^{7}\).

Constraints

  • \(1 \leq N \leq 10000\)

Example

Test 1

Input
2m2a3b4ezh 
Output
mmaabbbeeeezh

Bình luận


  • 2
    hieuminh0157    8:09 a.m. 25 Tháng 7, 2024

    include <iostream>

    using namespace std;

    int main()
    {
    string s;
    cin >> s;
    int d = 0;
    for (int i = 0; i < s.size(); i++)
    {
    if (isdigit(s[i]))
    {
    d = d * 10 + s[i] - '0';
    }
    else
    {
    if (d == 0)
    {
    cout << s[i];
    continue;
    }
    for (int j = 1; j <= d; j++) cout << s[i];
    d = 0;
    }
    }
    }


    • 13
      SPyofgame    9:33 p.m. 7 Tháng 6, 2020 chỉnh sửa 2

      Spoiler Alert


      Hint 1

      Lặp lại quá trình nhận số x và kí tự c tiếp sau nó

      Xuất x lần kí tự c

      Lưu ý kiểm tra trường hợp không nhận được số x nào (c là kí tự đơn lẻ* thì xuất c


      Reference AC code | O(n) time | O(n) auxiliary space | String

      C++
      inline bool isDigit(char c) { return '0' <= c && c <= '9'; }
      int main()
      {
          string s;
          getString(s);
      
          for (int i = 0; i < sz(s); ++i)
          {
              if (isDigit(s[i]) == false) { cout << s[i]; continue; }
              int x = 0;
              while (i < sz(s) && isDigit(s[i])) x = 10 * x + (s[i++] - '0');
              while (x--) cout << s[i];
          }
          return 0;
      }
      

      Reference AC code | O(n) time | O(1) auxiliary space | String, Online Solving

      C++
      inline bool isLowLatin(char c) { return 'a' <= c && c <= 'z'; }
      inline bool isDigit(char c)    { return '0' <= c && c <= '9'; }
      int main()
      {
          for (char c = getchar(); isLowLatin(c) || isDigit(c); c = getchar())
          {
              if (isDigit(c) == false) { cout << c; continue; }
              int x = 0;
              while (isDigit(c)) x = 10 * x + (c - '0'), c = getchar();
              while (x--) cout << c;
          }
          return 0;
      }