Tải bản đầy đủ (.doc) (1 trang)

Gián án Bai toan Day so trung binh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (45.12 KB, 1 trang )

Bài toán: Dãy số trung bình
Tìm các dãy số trong dãy số nguyên cho trước nhận dãy số m đã cho làm dãy số trung bình....
Đề bài: Xét dãy số nguyên không giảm S
1
, S
2
, ..., S
n+1
(S
i
<= S
i+1
). Dãy m
1
,
m
2
, ...m
n
được xác định bởi công thức m
i
= (s
i
+ s
i+1
)/2 (1<=i<=n) gọi là dãy trung
bình của dãy S. Ở đây ta chỉ xét trường hợp m
i
là số nguyên. Cho trước dãy m,
nhiệm vụ của bạn là tìm tất cả những dãy S nhận dãy m làm dãy trung bình
Input: Dữ liệu vào từ file Mean.inp gồm


Dòng đầu tiên chứa số nguyên N (1<=N<=5 000 000)
N dòng sau, dòng thứ i chứ số nguyên m
i
(1<=m
i
<=1 000 000 000)
Output: Dữ liệu ra ghi lên file Mean.out gồm một số nguyên duy nhất là số lượng dãy S thỏa yêu cầu
đề bài mà bạn tìm được
Ràng buộc: Chương trình không được phép sử dụng quá 16MB bộ nhớ.
MEAN.INP MEAN.OUT
3
2
5
9
4
Thuật toán: Từ công thức m
i
= (s
i
+ s
i+1
)/2 ta có m
i
>= s
i
. Bản chất của bài toán thật ra là yêu cầu ta
tìm tập giá trị của s
1
mà thôi vì khi có s
1

ta có thể tính ra toàn bộ dãy s theo công thức của dãy m: s
i+1
=
2m
i-1
-s
i
.
Đặt s
1
= a, ta có s
2
= 2m
1
- a <= m2 <=> a>= 2m
1
- m
2
. Tương tự, với các bất đẳng thức s
3
<m
3
,
s
4
<m
4
, ..., s
n
< m

n
ta cũng suy ra được các giới hạn khác của a. Tuy nhiên, chỉ có hai dạng chung là:
a >= x
a <= y
Gọi X
max
là giá trị lớn nhất trong số các cận dưới của a, Y
min
là giá trị nhỏ nhất trong số các cận trên của
A. Khi đó, dãy số S thỏa yêu cầu đề bài là Y
min
- X
max
+ 1. Độ phức tạp của thuật toán chỉ là O(n)!
Download chương trình (mean.pas)
Theo tin học và tuổi trẻ

×