Bài tập  /  Bài đang cần trả lời

Sử dụng ngôn ngữ lập trình C++ để giải quyết bài tập sau:

Sử dụng ngôn ngữ lập trình C++ để giải quyết bài tập sau:
n vận động viên tham gia 1 giải đấu thể thao, mỗi vận động viên được in số thứ tự trên áo (từ 1 - n). Trong ngày khai mạc, n vận động viên xếp thành hàng ngang theo thứ tự tăng dần của số áo.
Trong lúc chụp ảnh, có một số vận động viên chạy ra khỏi hàng để bắt tay khán giả, nhưng khi quay về hàng họ không đứng vào vị trí ban đầu mà đứng vào vị trí khác.
Có m lượt, mỗi lượt có dạng (i, j) - người mang áo số i chạy ra bắt tay khán giả và quay về hàng đứng bên trái người có số áo j.
Yêu cầu: Hãy chỉ ra cho ban tổ chức, sau m lượt 2 người bên cạnh của từng vận động viên là những người mang số áo bao nhiêu?
Dữ liệu vào: 
    + Dòng đầu tiên chứa 2 số nguyên n m
    + Mỗi dòng trong m dòng tiếp theo chứa một cặp(i, j) cách nhau một dấu cách.
Dữ liệu ra: gồm n dòng, dòng thứ i chứa 2 số nguyên là số của đứng bên trái và bên phải của người i, đối với người đầu hàng hoặc cuối hàng thì người bên trái hoặc người bên phải sẽ có giá trị 0
2 Xem trả lời
Hỏi chi tiết
167
Tham khảo câu trả lời từ Trợ lý ảo Lazi
#include
#include

using namespace std;

int main() {
int n, m;
cin >> n >> m;

vector a(n+2); // tạo mảng a với n+2 phần tử, để xử lý trường hợp người đầu hàng và cuối hàng
for (int i = 1; i <= n; i++) {
a[i] = i; // gán số áo cho từng vận động viên
}

for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
swap(a[x], a[y]); // hoán đổi vị trí của 2 vận động viên
}

for (int i = 1; i <= n; i++) {
cout << a[i-1] << " " << a[i+1] << endl; // in ra vị trí của 2 người bên cạnh vận động viên thứ i
}

return 0;
}
1
0
GUNTER OBERDORF ...
04/05 08:09:14
+5đ tặng
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    vector<int> left(n + 2), right(n + 2);

    // Khởi tạo mảng left và right ban đầu
    for (int i = 1; i <= n; ++i) {
        left[i] = i - 1;
        right[i] = i + 1;
    }

    // Xử lý m lượt chạy ra bắt tay khán giả và quay về
    for (int i = 0; i < m; ++i) {
        int a, b;
        cin >> a >> b;
        right[left[a]] = right[a];
        left[right[a]] = left[a];
        right[a] = right[b];
        left[a] = b;
        right[b] = a;
        left[right[a]] = a;
    }

    // In ra kết quả
    for (int i = 1; i <= n; ++i) {
        cout << left[i] << " " << right[i] << endl;
    }

    return 0;
}

 

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập
0
0
Trần Bảo Nam
06/05 19:23:08
#include <iostream>
#include <vector>

using namespace std;

int main() {
  // Đọc dữ liệu đầu vào
  int n, m;
  cin >> n >> m;

  vector<pair<int, int>> swaps(m);
  for (int i = 0; i < m; ++i) {
    cin >> swaps[i].first >> swaps[i].second;
  }

  // Khởi tạo vị trí ban đầu
  vector<int> positions(n);
  for (int i = 0; i < n; ++i) {
    positions[i] = i;
  }

  // Thực hiện các lượt đổi chỗ
  for (const auto& [i, j] : swaps) {
    positions[i - 1] = positions[j - 1];
    for (int k = i; k < j; ++k) {
      positions[k] = positions[k + 1];
    }
  }

  // Xuất kết quả
  for (int i = 0; i < n; ++i) {
    int left = (i == 0) ? 0 : positions[i - 1];
    int right = (i == n - 1) ? 0 : positions[i + 1];
    cout << left << " " << right << endl;
  }

  return 0;
}
 

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×