Bài tập code

Chào mọi người, Em tên là Tạng em cần mọi người giúp em một vài vấn đề sau:
Em có 2 bài tập nhơ này:

Gửi mail cho em qya địa chỉ: 19522181@gm.uit.edu.vn
bài 1: THỬ NGHIỆM
Ở câu lạc bộ Kỹ thuật của tương lai các bạn trẻ có nhiệm vụ học cách lắp ráp và chế tạo các rô bốt điều khiển từ xa phục vụ cho việc thăm dò khám phá các hành tinh xa xôi và các vùng đất đầy bí ẩn dưới đáy đại dương sâu thẳm.
Các rô bốt thường xuyên được thử nghiệm để sớm phát hiện sai sót hoặc nhược điểm trong thiết kế. Lần thử nghiệm này người ta kiểm tra phản ứng của rô bốt với các lệnh:

  • ***L*** – *Bên trái quay!:* Quay trái 90[SUP]0[/SUP],
  • ***R*** – *Bên phải quay!:* Quay phải 90[SUP]0[/SUP],
  • ***A*** – *Đằng sau quay!:* Quay 180[SUP]0[/SUP].
Có ***n*** rô bốt được đưa ra thử nghiệm, trong đó có ***m*** rô bốt mới lắp và được thử nghiệm lần đầu. Các rô bốt được xếp thành một hàng ngang và cùng quay mặt về phía trước. Các lệnh được lần lượt lấy ra và truyền đi từ xâu ***s*** xác định trước. Xâu ***s*** chỉ chứa các ký tự trong tập {***L***, ***R***, ***A***}. Các rô bốt cũ thực hiện đúng mọi lệnh điều khiển. Các rô bốt mới chỉ thực hiện đúng lệnh ***A*** và thực hiện ngược các lệnh ***L***, ***R*** (thay vì thực hiện lệnh ***L*** thì thực hiện thao tác ***R*** và ngược lại). Khi có rô bốt đứng ngược chiều nhau trong hàng hệ thống nhận dạng sẽ bật còi báo động nhắc nhở. Hãy xác định số lần còi báo động được bật trong toàn bộ quá trình thử nghiệm. ***Dữ liệu:*** Vào từ thiết bị nhập chuẩn:
  • Dòng đầu tiên chứa hai số nguyên ***n*** và ***m*** (1 ≤ ***n*** ≤ 10[SUP]5[/SUP], 0 ≤ ***m*** ≤ ***n***),
  • Dòng thứ 2 chứa số nguyên ***k*** độ dài xâu lệnh ***s*** (1 ≤ ***k*** ≤ 10[SUP]5[/SUP]),
  • Dòng thứ 3 chứa xâu ***s***.
***Kết quả:*** Đưa ra thiết bị xuất chuẩn một số nguyên – số lần còi báo động được bật. **đây là code python của em:** **import math nm = input() k = input() chuoi = input() nm = tuple(map(int, nm.split(" "))) dem = 0 if len(chuoi)%2 != 0: chuoi = chuoi+' ' while chuoi != "" and nm[0] > nm[1]: ks = 0 if chuoi[0]+chuoi[1] == 'RA' or chuoi[0]+chuoi[1] == "LA": dem = dem+2 ks = 1 if ks == 1: i = 2 while chuoi* == 'A': dem = dem+1 i = i+1 elif (chuoi[0] == 'R' or chuoi[0] == "L") and ks != 1: dem = dem+1 if ks == 1: chuoi = chuoi[i:None] if ks == 0: chuoi = chuoi[2:None] print(dem) [ATTACH=JSON]{"data-align":"none","data-size":"full","title":"Untitled.png","data-attachmentid":539615}[/ATTACH]** em chạy thử thì đúng nhưng nộp lên webcode bị timerun error và chỉ được 25đ **bài 2:** **CHỈNH LÝ** Trải qua một đêm dài trên sao Hỏa một chiết áp của trạm thăm dò tự động bị tụt xuống mức ***a***, một mức nguy hiểm. Từ trạm điều khiển ở Trái đất người ta phát các lệnh điều khiển nâng mức điện áp lên ***b***. Có 2 loại lệnh: lệnh ***X*** nâng điện áp lên 1 và lệnh ***Y*** – nâng mức điện áp lên 2. Trong quá trình nâng phải tránh đưa điện áp vào trạng thái có mức là bội của ***c*** – trạng thái không có lợi cho nhiều linh kiện khác. Hãy xác định số lệnh tối thiểu cần truyền đi. ***Dữ liệu:*** Vào từ thiết bị nhập chuẩn gồm một dòng chứa 3 số nguyên ***a***, ***b*** và ***c*** (1 ≤ ***a*** < ***b*** ≤ 10[SUP]9[/SUP], 2 ≤***c*** ≤ 10[SUP]9[/SUP], ***a*** và ***b*** không phải là bội của ***c***). ***Kết quả:*** Đưa ra thiết bị xuất chuẩn một số nguyên – số lệnh ít nhất cần truyền đi. **đây là code C++ của em:** **#include <iostream> using namespace std; int main() { int64_t a, b, c, dem = 0, ac; cin >> a >> b >> c; for (int i = (a / c) + 1; i <= b / c; i++) { ac = i * c; dem = dem + ((ac - a) / 2) + 1; a = ac + 1; } if (b - a > 0) { if ((b - a) % 2 == 0) dem = dem + (b - a) / 2; else dem = dem + (b - a) / 2 + 1; } cout << dem; return 0; } [ATTACH=JSON]{"data-align":"none","data-size":"full","title":"1111.png","data-attachmentid":539616}[/ATTACH]** em nộp lên webcode bị time limit MỌI NGƯỜI GIÚP EM VỚI. **Gửi mail cho em qya địa chỉ: 19522181@gm.uit.edu.vn** EM XIN CẢM ƠN.

Chào bạn.

Với bài 2 Chỉnh lý, bạn thay đổi a, b, c, dem = 0, ac có kiểu dữ liệu int xem thử.
Nếu không phải là do ảnh hưởng của kiểu dữ liệu thì bạn test thử example sau đây:

EXAMPLE:

[ATTACH=JSON]{“alt”:“Click image for larger version Name: mn.png Views: 0 Size: 4.3 KB ID: 539623”,“data-align”:“none”,“data-attachmentid”:“539623”,“data-size”:“full”,“title”:“mn.png”}[/ATTACH]

(Giải thích:
Test 1: 2 -> 4 -> 5 -> 7 (số 3 và 6 bị loại bởi vì là bội của số 3) => Có 3 mức tăng từ 2 lên 7 => OUTPUT: 3
Test 2: 4 -> 5 -> 7 -> 8 -> 10 (số 6 và số 9 bị loại bởi vì là bội của số 3) => Có 4 mức tăng từ 4 lên 10 => OUTPUT: 4)

Nếu example kiểm tra đúng bạn có thử các mẫu test với phạm vi input như sau thì chương trình của bạn có chạy lâu không, hay cụ thể là số lần thực hiện vòng lặp của bạn có tăng quá nhiều không:

[ATTACH=JSON]{“alt”:“Click image for larger version Name: mn.png Views: 0 Size: 11.3 KB ID: 539624”,“data-align”:“none”,“data-attachmentid”:“539624”,“data-size”:“full”,“title”:“mn.png”}[/ATTACH]

Để tránh sử dụng vòng lặp for, bạn có thể tham khảo hướng dẫn sau:

  • Bước 1: Đếm từ mức a lên mức b thì cần tăng bao nhiêu mức (lúc này tính luôn cả trường hợp mức là bội của c), kết quả giả sử được gán cho biến CHUNG.
  • Bước 2: Đếm từ mức a lên mức b thì có bao nhiêu mức là bội của c (có thể không sử dụng vòng lặp), kết quả giả sử được gán cho biến RIÊNG. (Gợi ý một phương pháp tham khảo: Bạn có thể sử dụng công thức đã học về cấp số cộng)
  • Bước 3: Output cần tìm là: OUTPUT = CHUNG - RIÊNG.
    Ví dụ 1:
    | INPUT
    | OUTPUT
    | 3
    1001
    2
    | 4
    Làm theo bước trên, ta có:
  • CHUNG = 998 (= 1001 - 3).
  • RIÊNG = 499 (các mức là bội của c là 4, 6, …, 1000 => có đúng 499 mức).
    => OUTPUT = 998 - 499 = 499.
    Ví dụ 2:
    | INPUT
    | OUTPUT
    | 9
    14
    24
    | 5
    Làm theo bước trên, ta có:
  • CHUNG = 5 (= 14 - 9).
  • RIÊNG = 0 (12 không phải là bội của 24).
    => OUTPUT = 5 - 0 = 5.
    Hy vọng bạn sẽ hoàn thành tốt bài tập này. Cố gắng lên nha Tạng nhé!!!