Một chương trình có L vòng lặp độc lập (không lồng nhau). Vòng lặp thứ k chạy đúng Nk lần lặp, đánh số j=0,1,…,Nk−1; biến chỉ số vòng lặp i được khởi tạo i=i0k trước vòng lặp và tăng thêm stepk mỗi lần lặp, tức tại lần lặp thứ j ta có i=i0k+j⋅stepk. Trong vòng lặp có Vk biến dẫn xuất (induction variable phụ) u1,…,uVk; theo cách tính CHƯA tối ưu, mỗi lần lặp biến ut được tính lại từ đầu bằng một phép NHÂN: ut=ct⋅i+dt (ct,dt cho trước).
Phép biến đổi giảm cường độ toán tử (strength reduction) thay việc tính lại ut bằng nhân, bởi: chỉ tính MỘT LẦN giá trị khởi tạo ut(0)=ct⋅i0k+dt và lượng gia tăng cố định ct⋅stepk trước khi vào vòng lặp (các phép nhân này KHÔNG tính là phép nhân "bên trong" vòng lặp), sau đó mỗi lần lặp j≥1 chỉ cần một phép CỘNG: ut(j)=ut(j−1)+ct⋅stepk.
Với mỗi vòng lặp k, hãy tính:
(a) Tổng số phép NHÂN thực hiện bên trong vòng lặp theo cách CHƯA tối ưu: Nk×Vk.
(b) Tổng số phép NHÂN thực hiện bên trong vòng lặp SAU KHI giảm cường độ toán tử: luôn bằng 0.
(c) Giá trị của tất cả các biến dẫn xuất u1,…,uVk ở LẦN LẶP CUỐI CÙNG (j=Nk−1); nếu Nk=0 (vòng lặp không chạy lần nào) thì không có giá trị nào, in NONE.
Cuối cùng, in tổng số phép nhân tiết kiệm được trên TOÀN CHƯƠNG TRÌNH (tổng của (a) trừ tổng của (b) qua mọi vòng lặp — vì (b) luôn 0 nên bằng tổng của (a)).
Lưu ý: dù Nk=0, các biểu thức khởi tạo ut(0) và lượng gia tăng ct⋅stepk vẫn được tính (đây là chi phí NGOÀI vòng lặp, không tính trong (a) hay (b)).
Dòng 1: số nguyên L (0≤L≤200). Với mỗi vòng lặp (k=1..L): một dòng "Nk i0k stepk Vk" (0≤Nk≤106, 0≤Vk≤20, các số còn lại là số nguyên có thể âm, trị tuyệt đối không vượt 104), rồi Vk dòng, mỗi dòng "ct dt".
Với mỗi vòng lặp theo đúng thứ tự: một dòng "a b" (kết quả câu (a), (b)), rồi một dòng cho câu (c) — hoặc NONE (nếu Nk=0), hoặc chuỗi Vk giá trị u1,…,uVk cách nhau bởi khoảng trắng (dòng trống nếu Vk=0 và Nk>0). Sau tất cả các vòng lặp, in một dòng cuối "TOTAL_SAVED s" với s là tổng số phép nhân tiết kiệm được.
Ví dụ:
Đầu vào:
2
5 0 2 2
3 1
2 0
0 10 1 1
5 5
Đầu ra:
10 0
25 16
0 0
NONE
TOTAL_SAVED 10
Đầu vào:
0
Đầu ra:
TOTAL_SAVED 0
Đang tải editor...