[Mảng 1 Chiều Cơ Bản]. Bài 48. Dãy con liên tiếp tăng dài nhất

Xem dạng PDF

Gửi bài giải

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

Tác giả:
Nguồn bài:
28Tech
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Cho mảng A[] gồm N phần tử nhiệm vụ của bạn là hãy liệt kê những dãy con liên tiếp tăng chặt dài nhất.

Gợi ý : So sánh a[i] và a[i - 1], nếu a[i] > a[i - 1] thì cập nhật độ dài dãy con hiện tại, ngược lại thì bạn so sánh độ dài dãy con kết thúc tại a[i - 1] so với kỷ lục đang có và cập nhật kết quả. Nếu độ dài dãy con đang có tốt hơn kỷ lục thì ghi nhận 1 dãy con, trường hợp độ dài dãy con hiện tại chỉ bằng dãy con kỷ lục thì tăng thêm 1 dãy con nữa. Nên dùng 1 mảng để lưu chỉ số bắt đầu của các dãy con thỏa mãn.


Đầu vào

• Dòng 1 là T : số bộ test

• Mỗi bộ test gồm 2 dòng

• Dòng 1 là N : số phần tử trong mảng

• Dòng 2 là N số trong mảng


Giới hạn

• 1<=T<=100

• 1<=N<=1000

• 0<=A[i]<=1000


Đầu ra

• Đối với mỗi bộ test dòng 1 in ra độ dài dãy con tăng chặt dài nhất, các dòng tiếp theo liệt kê các dãy con thỏa mãn trên từng dòng. Ngoài ra bạn cần ghi thêm số thứ tự bộ test. Xem test mẫu để rõ hơn yêu cầu.


Ví dụ :

Input 01
5
10
39 48 41 18 12 35 10 29 29 45 
10
19 37 14 24 49 45 36 25 38 16 
10
40 28 1 29 11 1 36 32 33 26 
10
13 32 1 18 49 7 48 1 17 32 
10
45 27 27 19 15 10 6 1 0 0
Output 01
Test #1 :
2
39 48 
12 35 
10 29 
29 45 
Test #2 :
3
14 24 49 
Test #3 :
2
1 29 
1 36 
32 33 
Test #4 :
3
1 18 49 
1 17 32 
Test #5 :
1
45 
27 
27 
19 
15 
10 
6 
1 
0 
0

Bình luận

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



  • 2
    luan54bc  đã bình luận lúc 22, Tháng 8, 2024, 13:37

    include <bits/stdc++.h>

    using namespace std;

    bool nt(int n) { if (n <= 1) return false; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return false; } return true; }

    int main() { int n; cin >> n; int a[n]; for (int i = 0; i < n; i++) { cin >> a[i]; }

    int dem = 0, vt = 0, kiluc = 0;
    for (int i = 0; i < n; i++) {
        if (nt(a[i])) {
            dem++;
            if (dem > kiluc) {
                kiluc = dem;
                vt = i - dem + 1;
            }
        } else {
            dem = 0;
        }
    }
    
    if (kiluc == 0) {
        cout << "NOT FOUND" << endl;
    } else {
        cout << kiluc << endl;
        for (int i = vt; i < vt + kiluc; i++) {
            cout << a[i] << " ";
        }
        cout << endl;
    }
    
    return 0;
    

    } bai nay em dan sai bai nay cua 46 a


  • -3
    Hahaaaa  đã bình luận lúc 11, Tháng 7, 2024, 4:40

    include <bits/stdc++.h>

    using namespace std; void test(){int n;cin>>n;vector<int> a(n);vector b;string s="";for(int&i:a){cin>>i;}s+=tostring(a[0])+' ';int tmp=1,maxx=0;for(int i=1;i<n;i++){if(a[i]>a[i-1]){s+=tostring(a[i])+' ';tmp++;}else{b.pushback({s,tmp});s.clear();s+=tostring(a[i])+' ';if(tmp>maxx){maxx=tmp;}tmp=1;}if(i==n-1){b.push_back({s,tmp});}}cout<>t;int x=1;while(t--){cout<<"Test #"<<x++<<" :"<<endl;test();}} mọi người cho em hỏi em bị sai ở đâu với ạ, vẫn có testcase bị sai ạ.


  • -5
    NTH11112222  đã bình luận lúc 11, Tháng 6, 2024, 13:43

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.