game box tin - Chém code như chém gió

Thảo luận trong 'Thảo luận chung' bắt đầu bởi cuong276, 10 Tháng sáu 2012.

Lượt xem: 25,748

  1. Bài này mình chú ý trước : mình lập code dựa trên thuật toán , chứ không phải dữ liệu nên mình sẽ thử word !
    Starlove thân !


    PHP:
     const fi='RECRUIT.INP'fo='RECRUIT.OUT';
     VAR
       
    n,k:word;
       
    a,kq:array[1..100of word;
       
    d   :array[1..100of boolean;
       
    m,dem:word;

     
    procedure init;
      
    begin
         fillchar
    (d,sizeof(d),TRUE);
         
    m:=0;
         
    dem:=0;
      
    end;

     
    procedure input;
      var
        
    f:text;
        
    i:word;
      
    begin
          assign
    (f,fi); reset(f);
          
    read(f,n,k);
          for 
    i:=1 to n do
           
    begin
              read
    (f,a[i]);
              
    d[a[i]]:=false;
           
    end;
          
    close(f);
      
    end;

     
    procedure processing;
      
    begin
        
    while dem<do
         
    begin
          inc
    (m);
          if 
    d[m]=true then
           begin
              dem
    :=dem+1;
              
    kq[dem]:=m;
           
    end;
         
    end;
      
    end;

     
    procedure output;
      var
        
    f:text;
        
    i:word;
      
    begin
         assign
    (f,fo); rewrite(f);
         for 
    i:=1 to dem do
          
    writeln(f,kq[i]);
         
    close(f);
      
    end;

     
    BEGIN
        init
    ;
        
    input;
        
    processing;
        
    output;
     
    END.
     
  2. mikelhpdatke

    mikelhpdatke Guest

    Để e tiếp tục :))

    Bài 1:Trong giao diện đồ hoạ của một hệ điều hành, màn hình được chia thành một lưới các ô vuông. Trên lưới, một ô vuông được định vị bằng toạ độ (x, y) : cột x, dòng y. Một cửa sổ được định nghĩa là một tập các ô vuông tạo thành một hình chữ nhật. Cửa sổ được xác định khi biết toạ độ (u, v) của ô góc trên bên trái và toạ độ (x, y) của ô góc dưới bên phải.
    Có thể mở được nhiều cửa sổ trên màn hình, khi đó cửa sổ mở sau có thể sẽ che khuất một phần của các cửa sổ mở trước. Người sử dụng hệ điều hành đóng một cửa sổ bằng cách nháy chuột lên ô vuông góc trên bên phải của cửa sổ, như vậy một cửa sổ chỉ có thể đóng lại được khi ô vuông ở góc trên bên phải của cửa sổ đó không bị che khuất.
    Trên màn hình có N cửa sổ được đánh số hiệu theo thứ tự mở ra từ 1 đến N. Cần dùng ít nhất bao nhiêu lần đóng cửa sổ để đóng được cửa sổ có số hiệu 1 ?


    Dữ liệu vào: File văn bản WINDOWS.txt:
    • Dòng thứ nhất ghi số nguyên dương N (N <= 100).
    • Trong N dòng tiếp theo, dòng thứ i ghi bốn số nguyên, không âm: Ui Vi Xi Yi , giá trị không vượt quá 10000, trong đó (Ui,Vi) là toạ độ ô góc trên bên trái, (Xi, Yi) là toạ độ ô góc dưới bên phải của cửa sổ số hiệu i.


    Dữ liệu ra: File văn bản WINDOWS1.txt:
    • Dòng đầu ghi số nguyên S.
    • Dòng tiếp theo ghi số hiệu của các cửa sổ được đóng theo thứ tự từ cửa sổ đóng truớc nhất đến cửa sổ đóng sau cùng là 1. Hai số hiệu cạnh nhau ngăn cách bằng một ký tự cách.


    Vd này hình như sai thì phải (e copy mà :D )

    Ví dụ:
    WINDOWS.txt
    3
    1 3 5 6
    2 4 6 6
    2 1 6 3


    WINDOWS1.txt
    2S
    3 1
     
  3. quanghero100

    quanghero100 Guest

    Thuật toán của cậu giống hệt cái thuật toán ban đầu tớ bắt tay vô làm tuy nhiên cậu xem cái đoạn này
    Mã:
    procedure input;
      var
        f:text;
        i:word;
      begin
          assign(f,fi); reset(f);
          read(f,n,k);
          for i:=1 to n do
           begin
              [COLOR="Red"]read(f,a[i]);
              d[a[i]]:=false;[/COLOR]
           end;
          close(f);
      end;
    chỉ cần trong file F có một phần tử mang giá trị 101 thì bài của cậu bị exit code 201 ngay vì mảng của cậu chỉ khai bái 100 phần tử nên khi đọc a=101 thì nó gán b[101]:=false mà mảng b của cậu không có phần tử thứ 101, việc dùng mảng đánh dấu như thế vừa tốn bộ nhớ vừa không đạt yêu cầu bài toán. Nếu như giới hạn a[ i ]<=2.10^9 thì cậu phải cần đến phần tử thứ 2.10^9 để đánh dấu, mà giới hạn của máy tính có cho phép số lượng phần tử của mảng đến con số đó không :) cậu bị sai lầm giống tớ lúc trước rồi :D cái bài này của cậu tương tự với đề thi tin học trẻ tỉnh tớ mấy năm trước
     
    Last edited by a moderator: 27 Tháng sáu 2012
  4. quanghero100

    quanghero100 Guest

    Mã:
    uses crt;
    var u,v,x,y,kq:array[1..100] of integer;
        i,j,n,k:integer;
    procedure input;
    var f:text;
        j,z:integer;
    begin
       assign(f,'WINDOWNS.TXT');
       reset(f);
       readln(f,n);
       for i:=1 to n do
            readln(f,u[i],v[i],x[i],y[i]);
       close(f);
    end;
    procedure xuli;
    begin
           i:=n;
           repeat
             if (u[1] in [u[i]..x[i]]) and (y[1] in [v[i]..y[i]]) then
               begin
                  inc(k);
                  kq[k]:=i;
               end;
             dec(i);
           until i=0;
    end;
    procedure output;
    var f:text;
    begin
      assign(f,'WINDOWNS1.TXT');
      rewrite(f);
      writeln(f,k,'S');
      for i:=1 to k do write(f,kq[i],' ');
      close(f);
    end;
    begin
       input;
       xuli;
       output;
    end.
    
    bài anh đã làm, tuy nhiên anh còn một chút thắc mắc về cái ví dụ. Với ví dụ trên thì kết quả file out phải là:
    1S
    1
    Vì của sổ thứ nhất có ô góc trên bên phải là [1;6]
    của sổ thứ 2 bắt đầu từ ô [2;4] đến ô [6;6] nên ô [1;6] vẫn không bị che khuất
    cửa sổ thứ 3 bắt đầu từ ô [2;1] đến ô [6;3] nên ô [1;6] vẫn không bị che khuất
    do đó để đóng được của sổ số 1 thì chỉ cần nháy chọn ô [1;6] trên cửa sổ 1 luôn như vậy kết quả phải là
    1S
    1
    nếu sửa ví dụ thành:
    file input
    3
    1 3 5 6
    1 4 6 6
    2 1 6 3
    thì file output là:
    2S
    2 1
    nếu file input put là:
    3
    1 3 5 6
    2 4 6 6
    1 2 4 6
    thì file output là:
    2S
    3 1
    nếu file input là:
    3
    1 3 5 6
    1 4 6 6
    1 2 4 6
    thì file output là:
    3S
    3 2 1
    Bài này để nhìn thấy rõ hơn thì phải vẽ hình ra :) :)
    ở trên là một số ví dụ mà anh tự đưa ra, có thể dùng nó là test kiểm tra :D:D
     
  5. mikelhpdatke

    mikelhpdatke Guest

    Thắc mắc của a Quang cũng giống của e, mà a biết bài này nguồn "gốc" ở đâu ko anh :-?
     
  6. quanghero100

    quanghero100 Guest

    Đề em đưa ra làm sao anh bik được :) :) em nói thử xem cái đề này ở đâu vậy:S:S:S
     
  7. mikelhpdatke

    mikelhpdatke Guest

    E copy bên 4rum khác =))

    Mà bây giờ e mới biết lệnh cấu trúc này, trước kia e toàn duyệt tìm xem nó có nằm trong mảng hay ko @-)
    Mã:
    if (u[1] in [u[i]..x[i]]) and (y[1] in [v[i]..y[i]]) then
     
  8. Hôm trước nghe em nói đang làm bài xử lí số lớn ! vậy đã làm chưa !
     
  9. mikelhpdatke

    mikelhpdatke Guest

    Em làm được nhưng nộp bài trên Spojj nó toàn báo chạy quá lâu

    Một số hàm sử lý số lớn.

    Mã:
    Type BigNum=ansistring;
    Cộng
    Mã:
    Function Cong(a,b:BigNum):BigNum;
    Var s:BigNum;
        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:=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;
    Trừ
    Mã:
    Function Tru(a,b:BigNum):BigNum;
    Var s:BigNum;
        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;
    Nhân

    Mã:
    Function NhanMin(a:BigNum;b:Longint):BigNum;
    Var s:Bignum;
        i,t:Longint;
    Begin
      s:=''; t:=0;
      For i:=length(a) downto 1 do
        Begin
          t:=t+(ord(a[i])-48)*b;
          s:=chr(t mod 10 + 48)+s;
          t:=t div 10;
        End;
      If t>0 then s:=chr(t+48)+s;
      While (length(s)>1) and (s[1]='0') do Delete(s,1,1);
      Exit(s);
    End;
    Function Nhan(a,b:BigNum):BigNum;
    Var s,st:BigNum;
        i,j:Longint;
    Begin
      s:='0';
      For i:=length(b) downto 1 do
        Begin
          st:=NhanMin(a,ord(b[i])-48);
          For j:=1 to length(b)-i do st:=st+'0';
          s:=Cong(s,st);
        End;
      While (length(s)>1) and (s[1]='0') do Delete(s,1,1);
      Exit(s);
    End;
    
    
     
  10. Em gửi đường link spoj giúp anh ! để anh thử gửi bài xem sao !
    cảm ơn em nhé !
    starlove thân !
     
  11. mikelhpdatke

    mikelhpdatke Guest

  12. Có N người xếp hàng mua vé. Ta đánh số thứ tự từ 1 đến N cho những người mua vé. Thời gian phục vụ bán vé cho người thứ i (0<i<=N) là ti. Mỗi người cần mau một vé nhưng mua được tối đa 2 vé. Vì thế một số người có thể nhờ người đứng ngay trứoc mình mua hộ, Nếu người thứ i nhận mua vé cho người thứ i+1 thì thời gian mua vé là ri. Tìm phuơng án sao cho tổng thời gian mua vé của N người là thấp nhất
    Dữ liệu vào từ File MUAVE.inp
    - dòng 1 ghi số N (1<N<=200)
    - Dòng thứ 2 ghi N số nguyên duơng ti
    - dòng thứ 3 ghi n-1 số nguyen duơng 2i

    kết quả ghi ra file MUAVE.out : tổng thời gian mua vé ít nhất !
     
  13. mikelhpdatke

    mikelhpdatke Guest

    Đề bài a hình như chỗ hướng dẫn input sai. Để e sửa lại :D



    Mã:
    Program MuaVe;
    Var F,R,T:array[-1..201] Of Integer;
    n:integer;g:text;
    
    Procedure Init;
    Var i:integer;
    Begin
     Assign(g,'C:\MUAVE.INP');
     reset(g);
      Readln(g,n);
       For i:=1 to n-1 do read(g,T[i]);
       readln(g,t[n]);
       For i:=1 to n-1 do read(g,R[i]);
      Close(g);
      F[0]:=0;
      R[0]:=High(integer);
      F[-1]:=0;
     End;
    
    Procedure Install;
    Var i,j:integer;
    Begin
     For i:=1 to n do
       Begin
        F[i]:=F[i-1]+T[i];
        If F[i]>F[i-2]+R[i-1] then F[i]:=F[i-2]+R[i-1];
       End;
    Assign(g,'C:\MUAVE.OUT');
    rewrite(g);
    write(g,F[n]);
    Close(g);
    End;
    
    BEGIN
    Init;
    Install;
    readln
    end.
    
     
  14. mikelhpdatke

    mikelhpdatke Guest

    E nộp bài trên spoj nó báo 20 RE-test-0
    http://vn.spoj.pl/problems/NKTICK/
    Anh có biết sai chỗ nào ko :-?

    Mã:
    Program MuaVe;
    Var F,R,T:array[-1..201] Of Integer;
    n:Longint; 
    
    Procedure Init;
    Var i:Longint;
    Begin
      Readln(n);
       For i:=1 to n do read(T[i]);
       For i:=1 to n-1 do read(R[i]);
      F[0]:=0;
      R[0]:=High(integer);
      F[-1]:=0;
     End;
    
    Procedure Install;
    Var i:Longint;
    Begin
     For i:=1 to n do
       Begin
        F[i]:=F[i-1]+T[i];
        If F[i]>F[i-2]+R[i-1] then F[i]:=F[i-2]+R[i-1];
       End;
    
    write(F[n]);
     
    End;
    
    BEGIN
    Init;
    Install;
     
    end.
    
     
    Last edited by a moderator: 1 Tháng bảy 2012
  15. để tối anh coi cho ! giờ anh đang chuẩn bị đi học !
    starlove thân !
     
  16. mikelhpdatke

    mikelhpdatke Guest

    Mã:
    Program MuaVe;
    Var F,R,T:array[-1..70001] Of Longint;
    n:Longint; 
    
    Procedure Init;
    Var i:Longint;
    Begin
      Readln(n);
       For i:=1 to n do read(T[i]);
       For i:=1 to n-1 do read(R[i]);
      F[0]:=0;
      R[0]:=High(integer);
      F[-1]:=0;
     End;
    
    Procedure Install;
    Var i:Longint;
    Begin
     For i:=1 to n do
       Begin
        F[i]:=F[i-1]+T[i];
        If F[i]>F[i-2]+R[i-1] then F[i]:=F[i-2]+R[i-1];
       End;
    
    write(F[n]);
     
    End;
    
    BEGIN
    Init;
    Install;
     
    end.
    
    
    
    E sửa được rồi, làm ac luôn :))
     
  17. Các bạn có bài nào hay hay thì post lên nhé !
    cảm ơn các bạn !
    Starlove thân !
     
  18. cuong276

    cuong276 Guest

    Một máy truyền tin có khả năng truyền mỗi lần một thông điệp dưới dạng một chuỗi nhị phân gồm N bit, các bit được truyền song song, mỗi bit sẽ được truyền trên một kênh truyền riêng biệt đến máy thu. Trong trạng thái bình thường, chuỗi nhận được máy thu giống hoàn toàn chuỗi đã được phát. Thật không may, do sơ suất khi lắp đặt máy thu, đã có 1 sự đảo lộn các kênh truyền. Hậu quả chuỗi nhận được tại máy thu lại là một hoán vị của chuỗi ban đầu.
    Trong hoàn cảnh hiện tại, Vì cần phải sử dụng gấp các thiết bị truyền tin này phục vụ cho công việc, thời gian không cho phép để sửa chữa hoặc thay thế. nên tổ kĩ thuật buộc phải tìm cách phát hiện được sự hoán chuyển các kênh đã xảy ra để có thể khôi phục đúng những thông điệp đã gửi. Rất may, khi lắp đặt, người ta đã thử phát M chuỗi và ghi lại M chuỗi tương ứng nhận được tại máy thu.
    Yêu cầu: là chuyên viên tin học, bạn hãy viết chương trình giúp tổ kĩ thuật chỉ ra sự tương ứng giữa các bit trong chuỗi phát đi và chuỗi nhận được nơi máy thu. Điều này nghĩa là, dữa trên M cặp chuỗi phát và thu tương ứng, bạn phải chỉ ra bỗ hoán vị [TEX]a_1,a_2,...,a_N[/TEX] trong đó cho biết bit thứ [TEX]a_i[/TEX] trong thông điệp gửi đi đã chuyển thành bit thứ i trong thông điệp nhận được.
    Dữ liệu: Dữ liệu vào cho trong file văn bản có tên TRANSMIT.INP có cấu trúc như sau;
    Dòng đầu chứa 2 số nguyên N,M ([TEX] 1<N\leq100 ,0<M\leq10000 [/TEX] ) cách nhau bởi dấu cách cho biết số bit trong mỗi thông điệp và số lượng thông điệp phát thử.
    Mỗi dòng trong M dòng tiếp theo chứa 2 chuỗi bit. Mỗi chuỗi là 1 dãy liên tiếp N số 0 hoặc 1. Hai chuỗi cách nhau bởi 1 dấu cách. Chuỗi đầu là chuỗi phát đi và chuỗi thứ 2 là chuỗi tương ứng nhận được tại máy thu.
    Kết quả: ghi ra file văn bản có tên TRANSMIT.OUT với 1 dòng duy nhất có nội dung như sau:
    Nếu với M cặp thông điệp dã cho có thể xác định duy nhất bộ hoán vị [TEX] a_1,a_2,...,a_N [/TEX]thì file kết quả sẽ chứa N số nguyên cho biết bộ hoán vị này. Các số trên cùng 1 dòng cách nhau bởi 1 dấu cách, ngược lại thì file kết quả chỉ chứa duy nhất 1 số -1
    Ví dụ
    TRANSMIT.INP
    11110000 11110000
    11001100 11001010
    10101010 10101001
    TRANSMIT.OUT
    1 2 3 4 5 8 6 7
     
    Last edited by a moderator: 1 Tháng bảy 2012
  19. mikelhpdatke

    mikelhpdatke Guest

    Chả nhẽ lại chơi kiểu trâu bò :|
    Bài này có ai nghĩ ra thuật toán nào hay hay ko.
     
  20. anh có kiểu trâu bò nè @@ hì hì
    mà em post cách trâu bò đi ! anh thử xem có hướng nào tối ưu hơn không ? có thì anh post !
     
Chú ý: Trả lời bài viết tuân thủ NỘI QUY. Xin cảm ơn!

Draft saved Draft deleted

CHIA SẺ TRANG NÀY