Hiển thị các bài đăng có nhãn Stack. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Stack. Hiển thị tất cả bài đăng
PTIT123A - Sắp xếp 2

PTIT123A - Sắp xếp 2

Link Sub: https://www.spoj.com/PTIT/problems/PTIT123A/
Người Gửi: Dương Lee

  • Problem:

Cho một danh sách chứa cả các số và các từ. Yêu cầu bạn hãy sắp xếp danh sách này tăng dần sao cho các từ theo thứ tự từ điển, các số theo thứ tự số. Hơn nữa, nếu phần tử thứ n là số thì danh sách sau khi sắp xếp phần tử thứ n cũng phải là số, nếu là từ thì vẫn là từ.
Lưu ý: Các từ chỉ gồm các chữ in thuờng trong bảng chữ cái tiếng Anh.
Input
Gồm nhiều dòng, mỗi dòng là một danh sách. Mỗi phần tử của danh sách cách nhau bởi dấu phẩy (“,”) theo sau là dấu cách, và danh sách được kết thúc bằng dấu chấm (“.”).  
Dữ liệu kết thúc bởi dòng chỉ chứa một dấu chấm.
Output
Với mỗi danh sách trong dữ liệu, xuất ra danh sách đã sắp xếp thỏa mãn yêu cầu đề bài (có định dạng như trong dữ liệu).
Example:
Input
0.
banana, strawberry, orange.
banana, strawberry, orange.
10, 8, 6, 4, 2, 0.
x, 30, -20, z, 1000, 1, y.
50, 7, kitten, puppy, 2, orangutan, 52, -100, bird, worm, 7, beetle.
.
Output:
0.
banana, orange, strawberry.
banana, orange, strawberry.
0, 2, 4, 6, 8, 10.
x, -20, 1, y, 30, 1000, z.
-100, 2, beetle, bird, 7, kitten, 7, 50, orangutan, puppy, 52, worm.

  • Solution:

- Bài này bạn cần phải lưu lại vị trí nào là số, vị trí nào là từ. Sau đó tách các từ, các số riêng biệt ra và sắp xếp chúng.
- Cuối cùng là chỉ việc in theo đúng thứ tự số và từ.
(code dưới đây dùng stack để tách từ và số)

  • Code:

C++:

https://ideone.com/ZT55Xq
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

string str;
void read()
{
    getline (cin, str);
}

vector <int> isNumber;
vector <string> words;
vector <int> numbers;

void init()
{
    isNumber.clear();
    words.clear();
    numbers.clear();
}

int StringToNum (string x)
{
    int f = 0;
    if (x[0]=='-')
       f = 1;
    int S = 0;
    for (int i=f; i<x.length(); i++)
    {
        S=(S*10)+(x[i]-'0');
    }
    if (f==1) return 0-S;
    return S;
}

void separation()    //Tach string thanh cac thanh phan rieng biet
{
    stack<string> st;
    for (int i=str.length()-1; i>=0; i--)
    {
        if (str[i]==',' || str[i]=='.')
        {
            st.push("");
        }
        else if (str[i]!=' ')
        {
            string top = st.top();
            st.pop();
            top=str[i]+top;
            st.push(top);
        }
    }
    while (!st.empty())
    {
        string top = st.top();
        st.pop();
        if (top[0]=='-' || (top[0]>='0' && top[0]<='9'))
        {
            numbers.push_back(StringToNum(top));
            isNumber.push_back(1);
        }
        else
        {
            words.push_back(top);
            isNumber.push_back(0);
        }
    }
}

void Sort()
{
    sort(numbers.begin(), numbers.end());
    sort(words.begin(), words.end());
}

void Print()
{
    int vN = 0;
    int vW = 0;
    for (int i=0; i<isNumber.size()-1; i++)
    {
        if (isNumber[i]==1)
        {
            cout<<numbers[vN]<<", ";
            vN++;
        }
        else
        {
            cout<<words[vW]<<", ";
            vW++;
        }
    }
    if (isNumber[isNumber.size()-1]==1)
    {
        cout<<numbers[vN]<<".";
        vN++;
    }
    else
    {
        cout<<words[vW]<<".";
        vW++;
    }
    cout<<endl;
}

int main ()
{
    while (1)
    {
        read();
        if (str==".") break;
        init();
        separation();
        Sort();
        Print();
    }
    return 0;
}

JAVA:

...

Python:

...
PTIT122A - Loại bỏ dấu ngoặc thừa

PTIT122A - Loại bỏ dấu ngoặc thừa

Link Sub: http://www.spoj.com/PTIT/problems/PTIT122A/
Người Gửi: Dương Lee

  • Problem:

Cho một biểu thức đúng và thỏa mãn:
- Các biến trong biểu thức chỉ chứa các chữ cái viết hoa.
- Các toán tử trong biểu thức là ‘+’ hoặc ‘-‘ (trong biểu thức không có phép toán nhân hay chia đâu nhé ;) )
Nhiệm vụ của các bạn trong bài này sẽ là loại bỏ các dấu ngoặc thừa mà vẫn giữ nguyên ý nghĩa của biểu thức.
Input
Dữ liệu vào gồm nhiều bộ test:
- Dòng đầu tiên chứa số biểu thức M (1<=M<=10).
- M dòng tiếp theo, mỗi dòng là một biểu thức đúng, có thể có các dấu cách tùy ý trong mỗi dòng. Độ dài mỗi dòng (bao gồm cả dấu cách) không quá 255 kí tự.
Output
Với mỗi biểu thức, in ra trên một dòng riêng biệt biểu thức cùng ý nghĩa với biểu thức đã cho và không có các dấu ngoặc thừa. Chú ý: Thứ tự của các toán hạng trong biểu thức in ra và biểu thức đầu vào phải giống nhau. Các dấu cách thừa cũng phải được loại bỏ.
Example:
Input
3
(A-B + C) - (A+(B - C)) - (C-(D- E) )
((A)-( (B)))
A-(B+C)
Output:
A-B+C-(A+B-C)-(C-(D-E))
A-B
A-(B+C)

  • Solution:

- Bài này thực chất là chỉ xử lý string bình thường và độ dài xâu cũng không quá dài (255 ký tự). Nhưng nếu làm theo cách xủ lý thông thường thì quá lằng nhằng và phức tạp + time chặt = 0.214s -> Khó 1 đấm AC ^^. Vậy nên để giải quyết nhanh gọn với độ phức tạp O(n) ta sẽ dùng stack để xử lý.
- Code dưới đây chia ra 3 phần xủ lý chính:
+ xóa dấu cách (cái này quá dễ rồi, chỉ cần không duyệt dấu cách là được)
+ xóa các cặp ngoặc kiểu dạng: (a)->a, ((a+b))->(a+b), ((a+((b-c))))->(a+(b-c)). Ý tưởng chính đối với loại cặp ngoặc này đó là với mỗi lần duyệt cặp ngoặc trong stack ta xác định xem trong cặp ngoặc đó có +, - không? nếu có thì đó là cặp ngoặc của một biểu thức, nếu không thì sẽ là cặp ngoặc thừa. (Để xử lý với O(n) dùng thêm stack_index và mảng dele[] để lưu vị trí và đánh dấu lại cặp ngoặc bị thừa)
VD:
((a+b))
x[0]='(' - Stack: empty
x[1]='(' - Stack: ( 
x[2]='a' - Stack: ( (
x[3]='+' - Stack: ( ( a
x[4]='b' - Stack: ( ( a +
x[5]=')' - Stack: ( ( a + b 
->Pop() -> Stack: ( -> có '+' -> ngoặc không thừa
x[6]=')' - Stack: ( 
->Pop() -> Stack: empty -> không có '+'or'-' -> ngoặc thừa

xóa các cặp ngoặc kiểu dạng: (a+(a+b))->a+a+b, d-((a-b)+c)->d-(a-b+c). Ý tưởng chính cho đối với cặp ngoặc này là với mỗi ngoặc '(' thì xem trước nó có dấu '-' hay không? Nếu không có thì có thể xóa cặp ngoặc đó. (Dùng stack để xủ lý với phức tạp O(n)).

  • Code:

C++:

https://ideone.com/tQedM4
#include <iostream>
#include <stack>
using namespace std;

string deleteSpace (string x)   //a+ b -> a+b
{
    string rs = "";
    for (int i=0; i<x.length(); i++)
        if (x[i]!=' ')
            rs+=x[i];
    return rs;
}

string delete_1 (string x)  //delete string like (a)->a || ((a+b))->(a+b)
{
    stack <char> s;
    stack <int> index;
    int dele[300] = {0};
    for (int i=0; i<x.length(); i++)
    {
        if (x[i]==')')
        {
            int flag = 0;
            while (s.top()!='(')
            {
                char top = s.top();
                if (top=='+' || top=='-')
                    flag = 1;
                s.pop();
                index.pop();
            }
            if (flag == 0)
            {
                dele[index.top()] = 1;
                dele[i] = 1;
            }
            s.pop();
            index.pop();
        }
        else
        {
            s.push(x[i]);
            index.push(i);
        }
    }
    string rs = "";
    for (int i=0; i<x.length(); i++)
    {
        if (dele[i]==0)
            rs+=x[i];
    }
    return rs;
}

string delete_2 (string x)  //delete string like ((a+b)+c)->(a+b+c) || (a+(b-c))->(a+b-c)
{
    stack <char> s;
    stack <int> index;
    int dele[300] = {0};
    for (int i=x.length()-1; i>=0; i--)
    {
        if (x[i]=='(')
        {
            int flag = 1;
            if (i==0 || x[i-1]!='-')
                flag = 0;
            while (s.top()!=')')
            {
                s.pop();
                index.pop();
            }
            if (flag == 0)
            {
                dele[index.top()] = 1;
                dele[i] = 1;
            }
            s.pop();
            index.pop();
        }
        else
        {
            s.push(x[i]);
            index.push(i);
        }
    }
    string rs="";
    for (int i=0; i<x.length(); i++)
    {
        if (dele[i]==0)
            rs+=x[i];
    }
    return rs;
}

int main ()
{
    string str = "";
    int n;
    cin>>n;
    cin.ignore();
    while (1)
    {
        if (n==0) break;
        n--;
        getline(cin, str);
        string str_no_space = deleteSpace(str);
        string str_1 = delete_1(str_no_space);
        string str_2 = delete_2(str_1);
        cout<<str_2<<endl;
    }
    return 0;
}

JAVA:

...

Python:

...
PTIT125I - Xóa chữ số

PTIT125I - Xóa chữ số

Link Sub: http://www.spoj.com/PTIT/problems/PTIT125I/
Người Gửi: Dương Lee

  • Problem:

Cho một số có N chữ số. Bạn hãy xóa đi K chữ số để được số còn lại sau khi xóa là lớn nhất có thể.
Input
- Dòng 1: số N và K (1<=K<N<=500 000).  
- Dòng 2: Số có N chữ số, bắt đầu bằng số khác 0.
Output
- Số lớn nhất có thể sau khi xóa K chữ số.
Example:
Input
4 2
1924
Output:
94

  • Solution:

Nhận thấy khi xóa đi mà số vẫn lớn nhất thì mỗi lần xóa một chữ phải tạo ra số lớn nhất. VD: 1924 -> Xóa lần 1 -> 924 max -> Xóa lần 2 -> 94 max. Vậy áp dụng stack để tạo dãy tuyến tính không tăng (khi còn xóa được). Dãy đó luôn là dãy lớn nhất có thể tạo được khi xóa. EX: 170803 (K=3) S: 1 (K=3) S: 7 (K=2 (xóa 1)) S: 7 0 (K=2) S: 8 (K=0 (xóa 7, 0)) S: 8 0 (K=0) S: 8 0 3 (K=0) -> 803 max.

  • Code:

C++:

https://ideone.com/8ZXdyM
#include <iostream>
#include <stack>
#include <vector>
using namespace std;

int main ()
{
    long N, K;
    cin>>N>>K;
    stack <int> S;
    for (long i=1; i<=N; i++)
    {
        char tmp_char;
        cin>>tmp_char;
        int tmp_int = tmp_char - '0';
        if (S.empty())
        {
            S.push(tmp_int);
        }
        else
        {
            while (!S.empty() && tmp_int > S.top() && K>0)
            {
                S.pop();
                K--;
            }
            S.push(tmp_int);
        }
    }
    while (K>0 && !S.empty())
    {
        S.pop();
        K--;
    }
    vector <int> smallest;
    while (!S.empty())
    {
        int tmp=S.top();
        S.pop();
        smallest.push_back(tmp);
    }
    for (long i=smallest.size()-1; i>=0; i--)
        cout<<smallest[i];
    return 0;
}

JAVA:


C11PAIRS - Đếm cặp

Người Gửi: Dương Lee

  • Problem:

N người đang đứng xếp hàng chờ mua vé vào buổi hòa nhạc. Mọi người đều phát chán khi phải chờ đợi, vì vậy họ nhìn quanh xem có ai quen hay không.  
Hai người A và B đứng trong hàng có thể nhìn thấy nhau nếu:  
Người A và người B đang đứng cạnh nhau. 
Giữa người A và người B, không có ai cao hơn hẳn một trong hai người. 
Hãy đếm xem có bao nhiêu cặp có thể nhìn thấy nhau trong hàng.
Input
Dòng đầu tiên chứa số nguyên dương N, là số người đang đứng trong hàng.
Mỗi dòng trong N dòng tiếp theo chứa một số nguyên là chiều cao của một người tính bằng nanomet. (Tất cả mọi người đều thấp hơn 231 nanomet).
Output
Một số nguyên duy nhất là kết quả cần tìm.
1 ≤ N ≤ 5.105
Trong 1/3 số test 1 ≤ N ≤ 5000
Example:
Input
7
2
4
1
2
2
5
1
Output:
10

  • Solution:

Các cặp có thể nhìn thấy nhau là (1, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (4, 5), (4, 6), (5, 6), (6, 7).
- Ý tưởng: Sử dụng stack để loại các cặp không thể nhìn thấy được. Chú ý cách làm dưới đây chỉ 100/100 khi nộp C++ (gcc 6.3) [CPP] + Duyệt từng người một: {mỗi người có 3 thông tin: +chiều cao: height; +kiểm tra sau nó: check_behind (Sử dụng để kiểm tra xem có sau nó có con nào lớn hơn không?); +kiểm tra đoạn giốn nhau: the_same (Sử dụng để đếm xem sau nó có bao nhiêu con có cùng độ cao); } +TH1: Stack rỗng: Cho người đó vào với (chiều cao, 0 có ai sau nó, 0 có con nào bằng với nó). VD: test trên (i==1: h_i=2) push (2, 0, 0); stack []: {(2, 0, 0);} +TH2: Stack không rỗng và hight_TOP < h_i: loại những con bé hơn trong stack và count++; (Vì đã gặp con cao hơn thì các con sau sẽ không thể nhìn thấy con trước đó và hai con liên tiếp sẽ nhìn thấy nhau.) VD: test trên (i==2: h_i=4) height_TOP = 2 < 4; ->pop() ->stack rỗng. -> push (4, 0, 0). cout++; stack []: {(4, 0, 0);} +TH3: Stack không rỗng và hight_TOP > h_i: Các con sau vẫn có thể nhìn thấy nên push tiếp cùng với cập nhật chỉ số và count++ (hai con liên tiếp nhìn thấy nhau.) VD: test trên (i==3: h_i=1) height_TOP= 4 > h_i; -> push (1, 1, 0) (chec_behind=1 vì sau con 1 có con 4 lớn hơn). +TH4: Stack không rỗng và hight_TOP = h_i: trường hợp này khá đặc biệt vì các con bằng nhau liên tiếp vẫn có thể nhìn thấy nhau và vẫn có thể nhìn thấy con cao hơn sau nó. VD: 4 2 2. thì (người thứ 3 vẫn nhìn được người 2 và người 1). -> ta sẽ push vào chỉ số push (h, check_behind_TOP, the_same_TOP+1) (có nghĩa là: cho vào h, sau h có hay không có con cao hơn nó sẽ phụ thuộc vào con sau nó, sau nó có the_same+1 con cùng chiều cao với nó). Và coutn++ (liên tiếp nhìn thấy) và coun+=the_same_TOP (số con có cùng độ cao sau nó) và count++ (nếu sau nó có con cao hơn). Cuối cùng thì in ra count. ^^ Xem hình để hiểu rõ hơn.

  • Code:

C++:



JAVA:


KPLANK - Bán dừa

Người Gửi: Dương Lee

  • Problem:

Nếu các bạn biết câu chuyện thương tâm "ăn dưa leo trả vàng" của Pirate hẳn đã phải khóc hết nước mắt khi anh ấy, vì lòng thương chim, đã bán rẻ trái dưa leo siêu bự của mình.  
Dưa leo cũng đã bị chim to lấy đi rồi, Pirate giờ chuyển sang nghề bán dừa để bù lỗ. Bất đắc dĩ thôi, vì trên đảo toàn là dừa...  
Nhưng mà bán cái gì thì đầu tiên cũng phải có biển hiệu đã. Pirate quyết định lùng sục trên đảo các mảnh ván còn sót lại của những con tàu đắm để ghép lại thành tấm biển. Cuối cùng anh cũng tìm được N tấm ván hình chữ nhật, tấm thứ i có chiều rộng là 1 đơn vị và chiều dài là ai đơn vị. Pirate dựng đứng chúng trên mặt đất và dán lại với nhau để được một mảnh ván to hơn (xem hình minh họa).
Việc cuối cùng chỉ là đem mảnh ván này đi cưa thành tấm biển thôi. Nhưng hóa ra đây lại là công việc khó khăn nhất. Pirate rất thích hình vuông và muốn tấm biển của mình càng to càng tốt, nhưng khổ nỗi trên đảo lại không có nhiều dụng cụ đo đạc. Không êke, không thước đo độ, nên Pirate chỉ còn cách dựa vào cạnh của N tấm ván ban đầu để cưa cho thẳng thôi. Pirate chỉ có thể cưa theo những đoạn thẳng chứa một cạnh nào đó (dọc hoặc ngang) của các tấm ván.  
Hãy giúp anh ấy cưa được tấm biển lớn nhất có thể.
Input
Dòng thứ nhất: ghi số nguyên N - số tấm ván. 
N dòng tiếp theo: mô tả độ cao của các tấm ván theo thứ tự trái sang phải sau khi đã dán lại.
Output
Một số nguyên duy nhất là độ dài cạnh của tấm biển lớn nhất có thể cưa được.
Độ cao của các tấm ván là các số nguyên dương không vượt quá 109.
1 ≤ N ≤ 106.
60% số test có 1 ≤ N ≤ 2000.
80% số test có 1 ≤ N ≤ 105.
Example:
Input
7
5
2
4
3
3
1
4
Output:
3

  • Solution:

- Giải thích: Hình dưới đây minh họa phương án tối ưu.
- Ý tưởng: + Áp dụng stack tại mỗi tấm ván tìm vị trí xa nhất bên trái mà tấm ván đó còn cắt được. + Áp dụng stack tại mỗi tấm ván tìm vị trí xa nhất bên phải mà tấm ván đó còn cắt được. - Thực hiện: + Đặt vị trí 0 và n+1 có độ cao là: 0 (hai điểm chốt hai đầu). + Duyệt 1: Duyệt từng phần tử i:(1->n) cho i (vị trí) vào stack. (trước khi cho vào stack thì pop hết tất cả các độ cao mà lớn hơn [i] - Điều này có nghĩa là loại các tấm ván cao hơn nó là các tấm ván có thể cắt được). Còn lại (top) chính là vị trí xa nhất không cắt được -> Lưu vị trí đó. + Duyệt 2: Tương tự nhưng duyệt (n->1). + Sau khi duyệt ta có left và right ở tại mỗi tấm ván.Vậy thì chỉ cần lấy left[]-right[]-1 là đã có chiều dài tối đa khi cắt theo tấm ván đó. -> Chỉ cần so sánh lấy max là được.

  • Code:

C++:



JAVA:


PTIT121E - Nguyên tố hóa học

PTIT121E - Nguyên tố hóa học

Link Sub: http://www.spoj.com/PTIT/problems/PTIT121E/
Người Gửi: Sai

  • Problem:

Hóa chất chỉ gồm các nguyên tố C, H, O có trọng lượng 12,1, 16 tương ứng.  
Nó được biểu diễn dạng "nén", ví dụ COOHHH là CO2H3 hay CH (CO2H) (CO2H) (CO2H) là CH(CO2H)3. 
Nếu ở dạng nén thì số lần lặp >=2 và <=9.  Tính khối lượng hóa chất.
Input
Gồm một dòng mô tả hóa chất không quá 100 kí tự chỉ gồm C, H, O, (, ), 2,..,9.
Output
Khối lượng của hóa chất (luôn <=10000).
Example:
Input
COOH
Output:
45

Input
CH(CO2H)3
Output:
148
Input
((CH)2(OH2H)(C(H))O)3
Output:
222
  • Solution:

Bài này có nhiều cách: - Cách 1: Dùng stack: + Mỗi một kí tự sẽ thêm vào stack giá trị của nó: C -> 12, H -> 1, O -> 16. + Khi gặp kí tự '(' thì push vào con 0 (Mục đích là để ngăn cách); + Khi gặp kí tự ')' thì tính tổng tất cả giá trị (+ xóa từng giá trị) từ đỉnh cho tới con 0 đầu tiên gặp. (Cái này giống như gộp phần tử). Xóa nốt con 0 và push vào giá trị tổng vừa tính. + Khi gặp kí tự từ 2->9: Lấy giá trị ở đầu và nhân với trị số rồi lại push vào stack. + Cuối cùng duyệt lại stack và tính tổng các phần tử trong stack. - Cách 2: (Admin): Dùng phương pháp trâu: Tìm con '(' và tìm con ')' tương ứng. coppy xâu trong cặp ngoặc đó rồi lặp số lần chỉ số của nó (nếu có) gán vào cuối xâu. Có nghĩa là: Sẽ chuyển toàn bộ cụm công thức hóa thành các cụm công thức đơn lẻ: VD: CH3(COOH)2 -> CH3COOHCOOH. Tham khảo cách 2 Click vào đây

  • Code:

C++:

https://ideone.com/FRWxHM

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int main ()
{
    string xau;
    cin>>xau;
    stack <int> s;
    int ktAdd=0;
    for (int i=0; i<xau.length(); i++)
    {
        if (xau[i]=='(')
        {
            s.push(0);
        }
        else if (xau[i]==')')
        {
            int tmp=0;
            while (!s.empty() && s.top()!=0)
            {
                tmp+=s.top();
                s.pop();
            }
            if (!s.empty() && s.top()==0)
            {
                s.pop();
                s.push(tmp);
            }
        }
        else if (xau[i]>='0' && xau[i]<='9')
        {
            int so=xau[i]-'0';
            if (!s.empty())
            {
                int tmp = s.top();
                s.pop();
                tmp = tmp * so;
                s.push(tmp);
            } else 
            {}
        }
        else if (xau[i]=='C')
        {
            s.push(12);
        }
        else if (xau[i]=='H')
        {
            s.push(1);
        }
        else if (xau[i]=='O')
        {
            s.push(16);
        }
    }
    int S=0;
    while (!s.empty())
    {
        S+=s.top();
        s.pop();
    }
    cout<<S;
    return 0;
}

JAVA:


BCSTACK - Cấu trúc dữ liệu ngăn xếp (stack) (Cơ bản)

BCSTACK - Cấu trúc dữ liệu ngăn xếp (stack) (Cơ bản)

Link Sub: http://www.spoj.com/PTIT/problems/BCSTACK/
Người Gửi: Dương Lee

  • Problem:

Bài này sẽ luyện cho bạn các thao tác cài đặt cấu trúc dữ liệu ngăn xếp (stack). 
Nếu đã cài đặt thành công, hãy tìm hiểu cách sử dụng container stack trong STL và cài đặt nó.  
Thao tác:  
-          1. ‘init’ : Khởi tạo stack rỗng.  
-          2. ‘push x’: Thêm phần tử x vào stack. (x là số nguyên dương không quá 10 mũ 9)  
-          3. ‘pop’: Nếu stack không rỗng lấy ra phần tử ở đỉnh stack.  
-          4. ‘top’: Trả về phần tử ở đỉnh stack. Nếu stack rỗng, trả về -1.  
-          5. ‘size:’ Trả về kích thước stack (số phần tử hiện tại của stack).  
-          6. ‘empty’: Kiểm tra stack rỗng hay không, nếu rỗng trả về 1, ngược lại là 0.  
-          7. ‘end’: Kết thúc chương trình.

Input
Gồm nhiều dòng mô tả các thao tác như trên (số phần tử của stack luôn không quá 1000).
Output
Khi gặp các thao tác 4,5,6 các bạn in ra trên 1 dòng tương ứng với câu trả lời.
Example:
Input
init
empty
push 2
empty
top
push 1
size
top
pop
top
init
push 1
top
init
top
end
Output:
1
0
2
2
1
2
1
-1

  • Solution:

Đây là bài cấu trúc dữ liệu cơ bản.
Sơ lược qua:
- Stack có dạng: mảng chứa các giá trị và Top để lấy phần tử ở đỉnh stack và kiểm tra stack.
- Họat động theo cơ chế: Vào cuối cùng thì ra đầu tiên.

  • Code:
C:



C++:



JAVA: