Đội ôn thi tin học trẻ không chuyên năm 2012

Status
Không mở trả lời sau này.
T

thiennu274

Bài này theo a nên dùng phương pháp sinh sinh được cấu hình nào ta cộng nó vào trong một chuỗi S nào đó quá trình sinh kết thúc khi độ dài chuỗi S lớn hơn hoặc bằng m, sau đó xuất S[m] là được. Mà hông biết cái giới hạn m nằm trong khoảng nào nhỉ nếu lớn quá chuổi S không được thì có thể thay chuổi S bằng một cái mảng để lưu lại các cấu hình sinh được rùi xuất phần tử thứ m của mảng
:confused::confused:hơ hơ, e chưa học tới phuơng pháp đó, em cũng nghĩ tới vậy đó. Nhưng mà... thứ tự mỗi lần đâu giống nhau ABCDABDC... mà, nên không biết sinh ra thế nào đây???
 
Q

quanghero100

:confused::confused:hơ hơ, e chưa học tới phuơng pháp đó, em cũng nghĩ tới vậy đó. Nhưng mà... thứ tự mỗi lần đâu giống nhau ABCDABDC... mà, nên không biết sinh ra thế nào đây???

Code đây nè :D
PHP:
uses crt;
var b:array[1..100000] of char;
    a:array[1..100] of integer;
    n,m,d,i,k,u,v:longint;
    ch:char;
procedure swap(var a,b:integer);
var tg:integer;
begin
    tg:=a; a:=b; b:=tg;
end;
begin
    clrscr;
    readln(n,m);
    for i:=65 to 65+n-1 do
       a[i-64]:=i;
    d:=0;
    repeat
        for i:=1 to n do
         begin
           inc(d);
           b[d]:=chr(a[i]);
         end;
        i:=n-1;
        while (i>0) and (a[i]>a[i+1]) do dec(i);
        if i>0 then
         begin
            k:=n;
            while a[k]<a[i] do dec(k);
            swap(a[i],a[k]);
            u:=i+1;
            v:=n;
            while u<v do
              begin
                  swap(a[u],a[v]);
                  inc(u);
                  dec(v);
              end;
         end;
    until (i=0) or (d>=m);
    if m>d then writeln('khong tim thay')
    else  writeln(b[m]);
    readln;
end.
 
M

mikelhpdatke

Cần sd quy hoạch động
Tóm tắt: Một nhóm 3 người gồm 2 anh em và người bạn thân đi tìm ngọc bích.
Sau một thời gian, họ quyết định chia tay. Công việc chỉ còn là chia số ngọc đều cho 3 người.
Có n viên với khối lượng m. Hãy đề xuất phương án chia nếu có.

input bai2.inp - n (n<=500)

- m[1]..m[n] (m<=1000, (m) -> gram)
output bài.out -Nếu ko có cách chia thì xuất số 0.
-Nếu có: -Số ngọc chia cho người bạn.
-Số thứ tự các viên ngọc đó.
 
1

11thanhkhoeo

bài này gần giông bài cái túi

Tổng số ngọc chia 3 chính là sức chứa của túi.

phải lấy đầy túi 1 thì mới lấy túi 2

Bắt buốc phải lấy đầy cả 3 túi

Thế thôi nhỉ còn gì khó
 
M

mikelhpdatke

Photo0904.jpg



P/s:Ai rảnh ngồi gõ lại cái đề
 
T

thiennu274

Giờ này không rảnh đánh lại cái đề, để mai rãnh + vui thì ngồi đánh rồi post cho nhóm koi. Còn giờ thì suy nghĩ bài này tiếp cái.
Người ta viết các số nguyên trong hệ cơ số 10 liên tiếp nhau từ 1 đến n tạo thành dãy số s
vd: n=12 ta có s=123456789101112
yêu cầu: với n cho trước, xác định chiều dài s, biết rằng n có không quá 30 chữ số
 
M

mikelhpdatke

Thuật đơn giản thôi, cho i chạy từ 1 đến n. Với mỗi lần chạy chuyển i sang dạng xâu gán vào 1 biến st. cộng dồn biến này váo. KQ bài toán là chiều dài của st
 
T

thiennu274

Thuật đơn giản thôi, cho i chạy từ 1 đến n. Với mỗi lần chạy chuyển i sang dạng xâu gán vào 1 biến st. cộng dồn biến này váo. KQ bài toán là chiều dài của st
Hời ơi, cái đó là trình độ cơ sở. Bạn đọc cái đề dùm, length(n)<=30, n phải thuộc string. Có phải là số đâu. Nếu cái bài dễ thế post lên làm gì :)>-
 
M

mikelhpdatke

Thế thì làm thế này 8-X
Tính sẵn tổng số các chữ số từ
1->9.
1->99.
1->999.
1->9999.
1->99999.
....
cho đến 1-> 30 chữ số 9.
Cái này có quy luật 8-X.
Dựa vào cái này + từ từ = kiểu xâu cho đến khi = n rồi xác văn định thôi 8-X
 
T

thiennu274

Thế thì làm thế này 8-X
Tính sẵn tổng số các chữ số từ
1->9.
1->99.
1->999.
1->9999.
1->99999.
....
cho đến 1-> 30 chữ số 9.
Cái này có quy luật 8-X.
Dựa vào cái này + từ từ = kiểu xâu cho đến khi = n rồi xác văn định thôi 8-X
Kiểu xâu liệu có chứa nỗi dãy đó hok??? Theo mình là cho nó vào mảng thì tốt hơn. Nếu n=23491725182581528158, thì tưởng tượng đi, length(s) tối đa là 255 thôi. Còn cái quy luật thì mình phát hiện ra rồi :D
 
T

thiennu274

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 độ dài n. đơn vị, tổ kiến năm ở một đầu mút đ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 w1 đượ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ược 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ổ, đi tới vị trí một miếng đường và tha về tổ, lượt chơi tiếp theo tiến hành tương tự, tất nhiên những miếng đường đã tha về tổ sẽ không còn trên đoạn thẳng ở vị trí cũ nữa
Một bài thi của chú kiến thợ 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 trọng 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, hay số nguyên dương a,m để xác định dãy w1,w2...wn theo công thức: wi=ai mod m+1
Yêu cầu xác định điểm tối đa mà một chú kiến thợ có thể kiếm được trong bài thi của kiến chúa.
Ví dụ n=5,T=15,a=4,m=9. Dãy w1..5=(5,8,2,5,8). Các miếng đường được bố trí :
Tổ kiến --> 5----- >8--->2--->5-->8
Phương án kiếm được nhiều nhất là 18 điểm cho chú kiến thợ là tha 3 miếng đường số 1,2 và 4 về tổ. Tổng quãng đường di chuyển là 14.
Theo như lời đã hứa. nhưng mà... mấy you giải cái bài của mình trước đi, rồi ha~ qua bài này. ok????
 
M

mikelhpdatke

Kiểu xâu liệu có chứa nỗi dãy đó hok??? Theo mình là cho nó vào mảng thì tốt hơn. Nếu n=23491725182581528158, thì tưởng tượng đi, length(s) tối đa là 255 thôi. Còn cái quy luật thì mình phát hiện ra rồi :D
Ansistring bạn ah, chắc là đủ ;)). Nếu vẫn ko đủ tính s-1 lưu chiều dài vào. Delete(s,1,length(s)). Rồi lại tính số thứ s. Cộng dồn vào. Đây là cah hơi bất đắc dĩ. Phải viết thêm hàm công xâu
 
T

thiennu274

để mình thử. cái bài nỳ số lớn quá !!! ==''. mà you thử viết xem, nói vậy chứ.... làm thì... hên sui :D
 
M

mikelhpdatke

Xong rồi đấy 8-X
Mã:
Var S,n:Ansistring;

    A,B:array[1..50] Of String;
Procedure Init;
Var i:integer;
    ch:char;
     st:string;
Begin

A[1]:='9';
A[2]:='189';
A[3]:='2889';
A[4]:='38889';
A[5]:='488889';
st:='';
ch:='9';
For i:=1 to 30 do
 Begin
  B[i]:=st+ch;
  st:=B[i];
 End;

Readln(n);
End;

Function Tru(a,b:Ansistring):Ansistring;
Var s:Ansistring;
    i,t:Longint;
Begin
  While length(a)<length(b) do a:='0'+a;
  While length(b)<length(a) do b:='0'+b;
  s:=''; t:=0;
  For i:=length(a) downto 1  do
    Begin
      t:=ord(a[i])-ord(b[i])+t;
      If t<0 then
        Begin
          Inc(t,10);
          s:=chr(t+48)+s;
          t:=-1;
        End
      Else
        Begin
          s:=chr(t+48)+s;
          t:=0;
        End;
    End;
  While (length(s)>1) and (s[1]='0') do Delete(s,1,1);
  Exit(s);
End;

Function Cong(a,b:Ansistring):Ansistring;
Var s:Ansistring;
    t,i:longint;
Begin
 While length(a)<length(b) do a:='0'+a;
 While length(b)<length(a) do b:='0'+b;
 s:='';
 t:=0;
   For i:=length(a) downto 1 do
     Begin
        t:=t+ord(a[i])+ord(b[i])-96;
        s:=chr(t mod 10 +48)+s;
        t:=t div 10;
     End;
 If t>0 then s:=chr(t+48)+s;
Exit(s);
End;

Procedure Install;
Var j:Longint;
   st,dcs,t,scs,x:Ansistring;
   s:string;

Begin
 St:=n;
 dcs:=A[length(st)];
 writeln(dcs,'dcs');
 t:=B[length(st)];
 j:=length(st);
 Str(j,x);
 scs:=x;

//writeln(scs,'scs');
//writeln(t,'t');
  Repeat
    t:=Tru(t,'1');
    dcs:=Tru(dcs,scs);
 //  writeln(t,'t');
 //   writeln(dcs,' dcs');
  Until t=n;

writeln(dcs,'--');
End;

BEGIN
Init;
Install;
readln
end.
Nếu test với số lơn thì lưu ý ở phần init cho bạn tự gán thêm giá trị cho mảng a nha.
Mang A có ý nghĩa. Số các chữ số 1-> 9,..99..
 
1

11thanhkhoeo

Ansistrìng có "sức chứa" $2^{20}$-1 kí tự liệu có đủ không

Các chú suy nghĩ nhé

Thân
 
M

mikelhpdatke

Xử lý bài này cũng không đơn giản, ý tưởng thì có nhưng dễ nhầm ;)). Về đọc lại lý thuyết xử lý số lớn rồi hãy làm ;))

Ai làm bài con kiến đê 8-X
 
T

thiennu274

cái cách của mikelhpdatke không khả thi. Cái đó chỉ cho khi n<=2*10^9 thoy. Còn n có không quá 30 chữ số thì.... Suy nghĩ tiếp đi nhá
 
Status
Không mở trả lời sau này.
Top Bottom