Grade 10 · Two-dimensional arrays (matrices)Citește în română

Deleting a row and a column

Original: Ștergerea unei linii și a unei coloane

O(n²)C++1765 lines2 examples

The idea

As with arrays, deleting means moving elements over the deleted one. For row k, every row i from k to n - 1 receives row i + 1, then n decreases by 1. For column c, on every row, the elements from c to m - 1 receive the value of their right neighbour, then m decreases. The matrix is read, then k and c (numbered from 1).

Original description (Romanian)

Ca la vectori, ștergerea înseamnă mutarea elementelor peste cel șters. Pentru linia k, fiecare linie i de la k la n - 1 primește linia i + 1, apoi n scade cu 1. Pentru coloana c, pe fiecare linie, elementele de la c la m - 1 primesc valoarea vecinului din dreapta, apoi m scade. Se citesc matricea, apoi k și c (numerotate de la 1).

Complexity
O(n * m)
Grade
Grade 10 (Clasa a X-a)

Examples

Example 1

Input

3 3
1 2 3
4 5 6
7 8 9
2 3

Expected output

1 2
7 8
Example 2

Input

2 4
1 2 3 4
5 6 7 8
1 1

Expected output

6 7 8

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

stergerea-unei-linii-si-coloane.cpp
/*
 * Titlu: Ștergerea unei linii și a unei coloane
 * Clasa: 10
 * Capitol: Tablouri bidimensionale (matrice)
 * Descriere: Ca la vectori, ștergerea înseamnă mutarea elementelor peste cel șters.
 *            Pentru linia k, fiecare linie i de la k la n - 1 primește linia i + 1,
 *            apoi n scade cu 1. Pentru coloana c, pe fiecare linie, elementele de
 *            la c la m - 1 primesc valoarea vecinului din dreapta, apoi m scade.
 *            Se citesc matricea, apoi k și c (numerotate de la 1).
 * Complexitate: O(n * m)
 *
 * Exemplu
 * Intrare:
 * 3 3
 * 1 2 3
 * 4 5 6
 * 7 8 9
 * 2 3
 * Ieșire:
 * 1 2
 * 7 8
 *
 * Exemplu
 * Intrare:
 * 2 4
 * 1 2 3 4
 * 5 6 7 8
 * 1 1
 * Ieșire: 6 7 8
 */
#include <iostream>
using namespace std;

int a[101][101];

int main()
{
    int n, m, k, c;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> a[i][j];
    cin >> k >> c;

    // ștergem linia k
    for (int i = k; i < n; i++)
        for (int j = 1; j <= m; j++)
            a[i][j] = a[i + 1][j];
    n--;

    // ștergem coloana c
    for (int i = 1; i <= n; i++)
        for (int j = c; j < m; j++)
            a[i][j] = a[i][j + 1];
    m--;

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
            cout << a[i][j] << ' ';
        cout << '\n';
    }
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.