[Mảng 1 Chiều Cơ Bản]. Bài 31. Chèn mảng

View as PDF

Submit solution

Points: 1.00 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Author:
Problem source:
28Tech
Problem type
Allowed languages
C, C#, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Cho mảng A[], B[] gồm NM phần tử, hãy chèn mảng B vào chỉ số P của mảng A và in ra mảng A[] sau khi chèn.


Đầu vào

Dòng 1 gồm N, MP

Dòng 2 gồm các phần trong mảng A[]

Dòng 3 gồm các phần tử trong mảng B[]


Giới hạn

1<=N<=M<=1000

0<=P<=N

0<=A[i], B[i]<=1000


Đầu ra

In ra mảng A[] sau khi chèn


Ví dụ :

Input 01
3 3 0
1 2 3
4 5 6
Output 01
4 5 6 1 2 3
Input 02
3 3 1
1 2 3
4 5 6
Output 02
1 4 5 6 2 3

Comments

Please read the guidelines before commenting.



  • 0
    bengokyeuanh99  commented on July 6, 2025, 6:39 a.m.

    include <stdio.h>

    int A[2005];

    int main() { int n, m, p, x; scanf("%d %d %d", &n, &m, &p);

    for (int i = 0; i < n; ++i)
        scanf("%d", &A[i]);
    
    for (int i = n - 1; i >= p; --i)
        A[i + m] = A[i];
    
    for (int i = 0; i < m; ++i) {
        scanf("%d", &x);
        A[p + i] = x;
    }
    
    for (int i = 0; i < n + m; ++i)
        printf("%d ", A[i]);
    
    return 0;
    

    }


  • 0
    hngoc  commented on July 4, 2025, 3:46 p.m.
    n,m,k=map(int,input().split())
    a=input().split()
    b=input().split()
    c=a[0:k]+b+a[k:]
    for x in c:print(x,end=' ')
    

  • 0
    nmtuong_cpp  commented on July 2, 2025, 5:41 p.m.

    Bài này mình làm theo kiểu cho mảng A[m + n], dịch ví trí sang phải từ vị trí p, chèn mảng B vào mảng A từ vị trí p, thì không full AC. Hỏi Grok nó cũng không nghĩ ra sai chỗ nào mới đau -.-.

    Làm theo kiểu in ra mảng A tới vị trí p, sau đó in ra mảng B từ vị trí p, rồi lại in tiếp phần còn lại của mảng A thì lại full AC.


    • 0
      bengokyeuanh99  commented on July 6, 2025, 6:28 a.m.

      Ông sai không phải vì tư duy sai hoàn toàn, mà sai ở chỗ… đủ hiểu nhưng chưa đủ sâu. Cụ thể: Sai chỗ chết người: for (int i = index; i < n; i++) { arrA[i + m] = arrA[i]; }

      Câu lệnh trên tưởng đúng – nhưng lỗi logic nghiêm trọng khi chèn mảng giữa: Khi dịch từ trái sang phải (từ index -> n) thì giá trị phía sau bị overwrite trước khi được đẩy, gây data corruption ngầm, nhất là nếu index > 0.

      Đây là bài học kinh điển trong thao tác dịch mảng: "Khi chèn mà phải dịch chỗ trống, thì dịch ngược từ cuối mảng về đầu để không làm rơi dữ liệu."

      Fix chuẩn là: for (int i = n - 1; i >= index; i--) { arrA[i + m] = arrA[i]; }

      Tư duy đúng bài: Đề yêu cầu xử lý mảng kiểu mutation trực tiếp (in-place), không phải chỉ in ra mảng tổ hợp. Cách “chia 3 đoạn rồi in” là 1 trick chạy được, nhưng không đúng về xử lý mảng thật, không scale nếu sau cần thao tác tiếp (sort, filter, remove...).

      Nếu tư duy theo hướng truy xuất sau này, thì mảng gốc phải giữ được trạng thái đúng – chứ không chỉ “cho ra output đúng”.

      Thêm 1 bonus trap tiềm ẩn mà ông nên học luôn: Nếu arrA[] không đủ n + m phần tử mà không pre-alloc đúng size, khi dịch sẽ đè dữ liệu khác, gây lỗi runtime random.

      Vậy nên: int arrA[2005]; // Không nên arrA[n + m] nếu n, m nhập vào

      Vì C++ không cho dynamic array theo biến không constant.

      Tổng kết cho anh em sau này khỏi toang: Dịch mảng -> luôn dịch từ cuối về đầu Muốn mutate mảng thật thì phải allocate đủ size In ra thì chia 3 đoạn cũng đúng, nhưng đó là short path, không phải true logic mutation Grok không debug hộ, nó chỉ nhìn syntax và flow - tư duy sai, nó im re

      “Không phải cứ ra được output là đúng – phải hiểu bản chất dữ liệu đang xử lý cái gì. Output đúng mà logic sai = quả bom hẹn giờ.”


  • -1
    VDev  commented on Feb. 23, 2025, 8:24 a.m.

    FULL AC

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll a[10000011], b[10000011];
    int main(){
        ll n, m, p;
        cin >> n >> m >> p;
        for(ll i = 0; i < n; i++){
            cin >> a[i];
        }
        for(ll i = 0; i < m; i++){
            cin >> b[i];
        }
        ll h = 0;
        for(ll i = 0; i <= n; i++){
                if(i != p){
                    cout << a[h] << " ";
                    h++;
                }else{
                    for(ll j = 0; j < m; j++){
                        cout << b[j] << " ";
                    }
                }
        }
        return 0;
    }
    

  • 0
    hoangvutitt  commented on Feb. 7, 2025, 9:36 a.m.

    include <bits/stdc++.h>

    define speed ios::syncwithstdio(false); cin.tie(nullptr); cout.tie(nullptr);

    define ll long long

    define db double

    using namespace std; int dem[10000001]; int n, m, p; void chen(int a[], int b[]){ int c = n; if(p == 0){ while(c){ a[c + m - 1] = a[c - 1]; c--; } for(int i = 0; i < m; i++) a[i] = b[i]; } else if(p == n - 1) for(int i = n; i < n + m; i++) a[i] = b[i - n]; else{ while(c != p){ a[c + m - 1] = a[c - 1]; c--; } for(int i = p; i < p + m; i++) a[i] = b[i - p]; } } int main() { speed cin >> n >> m >> p; int a[2500], b[2500]; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < m; i++) cin >> b[i]; chen(a, b); for(int i = 0; i < n + m; i++) cout << a[i] << ' '; return 0; }


  • 0
    ho_sy_son_072  commented on Feb. 6, 2025, 3:28 a.m.

    include <iostream>

    include <iomanip>

    include <cmath>

    using namespace std;

    int main(){ int n,m,p; cin >> n >> m >> p; int a[n],b[m]; for(int i=0;i<n;i++){ cin >> a[i]; } for(int i=0;i<m;i++){ cin >> b[i]; } for(int i=0;i<p;i++){ cout << a[i] << " "; } for(int i=0;i<m;i++){ cout << b[i] << " "; } for(int i=p;i<n;i++){ cout << a[i] << " "; } return 0; }


  • -2
    Kaybe  commented on Jan. 7, 2025, 6:34 a.m.

    include <stdio.h>

    include <math.h>

    int main(){ int n, m, p; scanf("%d%d%d", &n, &m, &p); int a[1001], b[1001]; for(int i = 0; i < n; i++){ scanf("%d", &a[i]); } for(int i = 0; i < m; i++){ scanf("%d", &b[i]); } for(int i = 0; i < n; i++){ if(i == p){ for(int j = 0; j < m; j++){ printf("%d ", b[j]); }
    } printf("%d ", a[i]);
    } if(p == n){ for(int j = 0; j < m; j++){ printf("%d ", b[j]); } } }


  • -2
    thinhphamminh274  commented on Nov. 10, 2024, 2:43 p.m.

    include <bits/stdc++.h>

    define N 1005

    define M 1005

    using namespace std; int a[N]; int b[M]; int main() { int n, m, p; cin >> n >> m >> p; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { cin >> b[i]; } for (int i = 0; i < n; i++) { if (i == p) { for (int j = 0; j < m; j++) { cout << b[j] << " "; } } cout << a[i] << " "; } if(p==n) { for (int i=0;i<n;i++) cout << b[i] << " "; } cout << endl; return 0; } cho newbie tham khảo(code dễ hiểu)


  • -2
    huu_binh_cpp  commented on July 19, 2024, 5:42 p.m.

    lưu ý: khi chèn vào thì chỉ số của mảng a tăng m giá trị, mảng b ở vị trí của chỉ số p c


  • -5
    NTH11112222  commented on June 10, 2024, 4:03 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -8
    TNgocNewbie18107  commented on May 30, 2024, 12:46 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -6
    Nghaiz  commented on May 7, 2024, 5:02 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • -4
    van_hao_638  commented on May 2, 2024, 4:28 p.m.

    include <stdio.h>

    include <math.h>

    int main(){ int n,m,p; scanf("%d%d%d",&n,&m,&p); int a[n],b[m]; for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) scanf("%d",&b[i]); for(int i=0;i<n;i++){ if(p==i){ for(int j=0;j<m;j++){ printf("%d ",b[j]); } } printf("%d ",a[i]); } }

    Anh Chị ơi, có thể chỉ giúp em sai chỗ nào được không ạ? em không biết em sai ở đâu mà vẫn còn sai 1 testcase ạ.


    • 1
      minhquan2905  commented on May 16, 2024, 3:59 p.m. edited

      include<stdio.h>

      int main(){ int n,m,p; scanf("%d %d %d", &n, &m, &p); int a[n+m]; int b[m]; for(int i=0;i<n;i++) { scanf("%d", &a[i]); } for(int i=0;i<n;i++) { scanf("%d", &b[i]); } for(int i=n-1;i>=p;i--) { a[i+m]=a[i]; }

      for(int i=p;i<=m+p-1;i++)
      {
          a[i]=b[i-p];
      }
      for(int i=0;i&lt;m+n;i++)
      {
          printf("%d ", a[i]);
      }
      return 0;
      

      }


    • -1
      minhquan2905  commented on May 16, 2024, 2:26 p.m.

      ơ kè chơi bửn


  • -29
    minhtran1482003  commented on April 23, 2024, 1:51 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.