9.29.2017

Kiến thông minh

Bảng B tin học trẻ toàn quốc 2011 - Bài 2/2
Kiến chúa tổ chức cuộc thi 'kiến thông minh' trên một đoạn thằng nằm ngang n đơn vị, tổ kiến nằm ở một đầu mút của đoạn thẳng đó. Khi mỗi chú kiến thợ vào thi, Kiến chúa rải n miếng đường đánh số từ 1 đến n. Miếng đường thứ i có trọng lượng Wi được đặt trên đoạn thẳng ở vị trí cách tổ kiến đúng i đơn vị độ dài (i=1,2,...,n).
Mỗi chú kiến thợ cần thực hiện đúng 3 lần kiếm mồi trong bài thi của mình. Mỗi lượt, chú kiến thợ xuất phát từ tổ đến vị trí miếng đường và tha về tổ của mình, lượt chơi tiếp theo tiến hành tương tự, tất nhiên tất cả những miếng đường đã tha về tổ thì không còn ở vị trí cũ nữa
Một bài thi của một chú kiến là hợp lệ nếu tổng quãng đường di chuyển của chú kiến trong cả ba lượt kiếm mồi không vượt quá T. điểm của bài thi là tổng trong lượng của ba miếng đường mà chú kiến thợ kiếm được.
Em được cho trước số nguyên dương n, số nguyên dương T, hai số nguyên dương a, m để xác định dãy W1, W2, ..., Wn theo công thức Wi=a^i mod m +1
Yêu cầu: Xác định điểm tối đa mà chú kiến thợ có thể kiếm được trong bài thi của kiến chúa.
Ví dụ với n=5, T=15, a=4, m=9. Dãy W1..5 = (5,8,2,5,8).
Phương án kiếm được nhiều điểm nhất (18 điểm) cho chú kiến thợ là tha ba miếng dường số 1, 2 và 4 về tổ. Tổng quãng đường di chuyển là 14.
Em cần tạo 10 file kết quả có dạng ANT?.TXT, trong mỗi file, ghi một số nguyên duy nhất là kết quả tìm được ứng với mỗi bộ giá trị (n, T, a, m) cho dưới đây:
File kết quả       n                    T                   a                     m
ANT0.TXT      3                     12                 2                     5       
ANT1.TXT      5                     15                 4                     9       
ANT2.TXT      10                   25                 9                     20         
ANT3.TXT      100                 100               11                   135             
ANT4.TXT      1 000              3 000            2                     9 999                   
ANT5.TXT      2 222              1 234            5                     99 991                   
ANT6.TXT      3 333              5 678            99                   999 983                     
ANT7.TXT      9 999              9 999            9 999              99 999                         
ANT8.TXT      999 999          5 555 555     789                 999 999 929     
ANT9.TXT      1 000 000       2 000 000     3 000 000       999 999 937                                               

                                                           Lời giải tham khảo

var w:array[1..10000] of longint;
    d:array[1..10000] of integer;
    i,j:integer;
    k,max,kl,qd,a,T,m,n:longint;
function tl(i:integer):longint;
begin
 k:=1;
 for j:=1 to i do k:=(k*a) mod m;
 tl:=k+1;
end;
procedure ss;
begin
 if kl>max then
  begin
    max:=kl;
    for i:=1 to k do write(d[i],' ');
    for i:=1 to k do d[i]:=0;
    writeln;
  end;
end;
procedure try(i:integer);
begin
   for j:=i to n do
     if qd+j*2<T then
       begin
        kl:=kl+w[j];
        qd:=qd+j*2;
        writeln(qd,' ',kl);
        inc(k);
        d[k]:=j;
        try(j+1);
        kl:=kl-w[j];
        qd:=qd-j*2;
        writeln(qd,' ', kl);
        dec(k);
       end
     else ss;
end;
begin
  write('nhap n,T,a,m:'); readln(n,T,a,m);
  for i:=1 to n do w[i]:=tl(i);
  k:=0;
  try(1);
  write(max);
  readln;
end.

No comments:

Post a Comment

Cảm ơn bạn đã nhận xét