Hướng dẫn một số bài trên SPOJ

53 5.6K 5
Hướng dẫn một số bài trên SPOJ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CÁC BÀI TOÁN DUYỆT 1. Robot quét vôi ( http:vn.spoj.plproblemsNKROBOT ) 2. DÃY ABC 3. BÀI TOÁN NGƯỜI DU LỊCH 4. Tour du lịch của Sherry ( http:vn.spoj.plproblemsLEM3 ) CÁC THAO TÁC XỬ LÝ BIT 1. Số đặc biệt: 2. Xâu cô lập: 3. Liệt kê tập con: DUYỆT BẰNG CÁCH CHIA ĐÔI TẬP HỢP 3. Nhà hàng Trung Quốc ( http:vn.spoj.plproblemsCHNREST ) 4. Phân tập ( http:vn.spoj.plproblemsLQDDIV ) TÌM KIẾM NHỊ PHÂN QUY HOẠCH ĐỘNG

CÁC BÀI TOÁN DUYỆT 1. Robot quét vôi ( http://vn.spoj.pl/problems/NKROBOT ) Có 9 căn phòng (đánh số từ 1 đến 9) đã được quét vôi với màu trắng, xanh hoặc vàng. Có 9 robot (đánh số từ 1 đến 9) phụ trách việc quét vôi. Mỗi robot chỉ quét một số phòng nhất định. Việc quét vôi được thực hiện nhờ một chương trình cài sẵn theo qui tắc: Nếu phòng đang có màu trắng thì quét màu xanh Nếu phòng đang có màu xanh thì quét màu vàng Nếu phòng đang có màu vàng thì quét màu trắng Cần phải gọi lần lượt một số các robot ra quét vôi (mỗi lần một robot, một robot có thể gọi nhiều lần và có thể có robot không được gọi. Robot được gọi sẽ quét vôi tất cả các phòng mà nó phụ trách) để cuối cùng các phòng đều có màu trắng. Yêu cầu: Hãy tìm một phương án như vậy sao cho số lần gọi robot là ít nhất. Giả thiết rằng lượng vôi cho mỗi lượt quét đối với các phòng là như nhau. Input 9 dòng đầu: dòng thứ i mô tả một danh sách các phòng do robot i phụ trách việc quét vôi. Mỗi dòng là một chuỗi các chữ số từ 1 9 biểu diễn các số hiệu của các phòng, các chữ số viết sát nhau. Dòng cuối mô tả mầu vôi ban đầu của các phòng. Dòng gồm 9 ký tự viết sát nhau gồm toàn các chữ cái T (trắng), X (xanh), V(vàng) biểu diễn mầu ban đầu của 9 căn phòng theo trật tự số hiệu của chúng. Output gồm một dòng Nếu không có phương án thì in ra số 0 Trái lại thì in ra dãy thứ tự các robot được gọi (số hiệu các robot được viết sát nhau và in ra kết quả có thứ tự từ điển bé nhất) Example Input: 159 123 357 147 5 369 456 789 258 XVXVXVTXT Output: 2255799 Hướng dẫn: Chú ý rằng, sau 3 lần quét vôi thì màu của một căn phòng trở lại như cũ. Bởi vậy, việc sử dụng một robot ≥ 3 lần là không tối ưu. Ta có thể giải bài toán bằng cách sinh dãy tam phân độ dài 9, mỗi giá trị a[i] chính là số lần gọi robot i. 2. DÃY ABC Cho trước một số nguyên dương N (N 100), hãy tìm một xâu chỉ gồm các ký tự A, B, C thoả mãn 3 điều kiện: - Có độ dài N - Hai đoạn con bất kỳ liền nhau đều khác nhau (đoạn con là một dãy ký tự liên tiếp của xâu) - Có ít ký tự C nhất. Hướng dẫn: Nếu dãy X 1 X 2 …X n thoả mãn 2 đoạn con bất kỳ liền nhau đều khác nhau, thì trong 4 ký tự liên tiếp bất kỳ bao giờ cũng phải có 1 ký tự "C". Như vậy với một dãy con gồm k ký tự liên tiếp của dãy X thì số ký tự C trong dãy con đó bắt buộc phải k div 4. Tại bước thử chọn X i , nếu ta đã có T i ký tự "C" trong đoạn đã chọn từ X 1 đến X i , thì cho dù các bước đệ quy tiếp sau làm tốt như thế nào chăng nữa, số ký tự "C" sẽ phải chọn thêm bao giờ cũng (n - i) div 4. Tức là nếu theo phương án chọn X i như thế này thì số ký tự "C" trong dãy kết quả (khi chọn đến X n ) cho dù có làm tốt đến đâu cũng T i + (n - i) div 4. Ta dùng con số này để đánh giá nhánh cận, nếu nó nhiều hơn số ký tự "C" trong “Cấu hình tối ưu” thì chắc chắn có làm tiếp cũng chỉ được một cấu hình tồi tệ hơn, ta bỏ qua ngay cách chọn này và thử phương án khác. Các bạn tham khảo Code: program ABC_STRING; const InputFile = 'ABC.INP'; OutputFile = 'ABC.OUT'; max = 100; var N, MinC: Integer; X, Best: array[1 max] of 'A' 'C'; T: array[0 max] of Integer; f: Text; function Same(i, l: Integer): Boolean; var j, k: Integer; begin j := i - l; for k := 0 to l - 1 do if X[i - k] <> X[j - k] then begin Same := False; Exit; end; Same := True; end; function Check(i: Integer): Boolean; var l: Integer; begin for l := 1 to i div 2 do if Same(i, l) then begin Check := False; Exit; end; Check := True; end; procedure KeepResult; begin MinC := T[N]; Best := X; end; procedure Try(i: Integer); var j: 'A' 'C'; begin for j := 'A' to 'C' do begin X[i] := j; if Check(i) then begin if j = 'C' then T[i] := T[i - 1] + 1 else T[i] := T[i - 1]; if T[i] + (N - i) div 4 < MinC then if i = N then KeepResult else Try(i + 1); end; end; end; procedure PrintResult; var i: Integer; begin for i := 1 to N do Write(f, Best[i]); WriteLn(f); WriteLn(f, '"C" Letter Count : ', MinC); end; begin Assign(f, InputFile); Reset(f); ReadLn(f, N); Close(f); Assign(f, OutputFile); Rewrite(f); T[0] := 0; MinC := N; Try(1); PrintResult; Close(f); end. 3. BÀI TOÁN NGƯỜI DU LỊCH Cho n thành phố đánh số từ 1 đến n và m tuyến đường giao thông hai chiều giữa chúng, mạng lưới giao thông này được cho bởi bảng C cấp nxn, ở đây C ij = C ji = Chi phí đi đoạn đường trực tiếp từ thành phố i đến thành phố j. Giả thiết rằng C ii = 0 với i, C ij = + nếu không có đường trực tiếp từ thành phố i đến thành phố j. Một người du lịch xuất phát từ thành phố 1, muốn đi thăm tất cả các thành phố còn lại mỗi thành phố đúng 1 lần và cuối cùng quay lại thành phố 1. Hãy chỉ ra cho người đó hành trình với chi phí ít nhất. Bài toán đó gọi là bài toán người du lịch hay bài toán hành trình của một thương gia (Traveling Salesman) 1 2 34 1 2 1 3 4 2 Hướng dẫn: Hành trình cần tìm có dạng (x 1 = 1, x 2 , …, x n , x n+1 = 1) ở đây giữa x i và x i+1 : hai thành phố liên tiếp trong hành trình phải có đường đi trực tiếp (C ij + ) và ngoại trừ thành phố 1, không thành phố nào được lặp lại hai lần. Có nghĩa là dãy (x 1 , x 2 , …, x n ) lập thành 1 hoán vị của (1, 2, …, n). Duyệt quay lui: x 2 có thể chọn một trong các thành phố mà x 1 có đường đi tới (trực tiếp), với mỗi cách thử chọn x 2 như vậy thì x 3 có thể chọn một trong các thành phố mà x 2 có đường đi tới (ngoài x 1 ). Tổng quát: x i có thể chọn 1 trong các thành phố chưa đi qua mà từ x i-1 có đường đi trực tiếp tới (1 i n). Nhánh cận: Khởi tạo cấu hình BestConfig có chi phí = + . Với mỗi bước thử chọn x i xem chi phí đường đi cho tới lúc đó có < Chi phí của cấu hình BestConfig?, nếu không nhỏ hơn thì thử giá trị khác ngay bởi có đi tiếp cũng chỉ tốn thêm. Khi thử được một giá trị x n ta kiểm tra xem x n có đường đi trực tiếp về 1 không ? Nếu có đánh giá chi phí đi từ thành phố 1 đến thành phố x n cộng với chi phí từ x n đi trực tiếp về 1, nếu nhỏ hơn chi phí của đường đi BestConfig thì cập nhật lại BestConfig bằng cách đi mới. Sau thủ tục tìm kiếm quay lui mà chi phí của BestConfig vẫn bằng + thì có nghĩa là nó không tìm thấy một hành trình nào thoả mãn điều kiện đề bài để cập nhật BestConfig, bài toán không có lời giải, còn nếu chi phí của BestConfig < + thì in ra cấu hình BestConfig - đó là hành trình ít tốn kém nhất tìm được Input: file văn bản TOURISM.INP Dòng 1: Chứa số thành phố n (1 n 20) và số tuyến đường m trong mạng lưới giao thông m dòng tiếp theo, mỗi dòng ghi số hiệu hai thành phố có đường đi trực tiếp và chi phí đi trên quãng đường đó (chi phí này là số nguyên dương 100) Output: file văn bản TOURISM.OUT, ghi hành trình tìm được. TOURISM.INP 4 6 1 2 3 1 3 2 1 4 1 2 3 1 2 4 2 3 4 4 TOURISM.OUT 1->3->2->4->1 Cost: 6 Các bạn tham khảo Code: program TravellingSalesman; const InputFile = 'TOURISM.INP'; OutputFile = 'TOURISM.OUT'; max = 20; maxC = maxlongint div 2; var C: array[1 max, 1 max] of longint; X, BestWay: array[1 max + 1] of longint; T: array[1 max + 1] of longint; Free: array[1 max] of Boolean; m, n: longint; MinSpending: longint; procedure Enter; var i, j, k: longint; f: Text; begin Assign(f, InputFile); Reset(f); ReadLn(f, n, m); for i := 1 to n do for j := 1 to n do if i = j then C[i, j] := 0 else C[i, j] := maxC; for k := 1 to m do begin ReadLn(f, i, j, C[i, j]); C[j, i] := C[i, j]; end; Close(f); end; procedure Init; begin FillChar(Free, n, True); Free[1] := False; X[1] := 1; T[1] := 0; MinSpending := maxC; end; procedure Try(i: longint); var j: longint; begin for j := 2 to n do if Free[j] then begin X[i] := j; T[i] := T[i - 1] + C[x[i - 1], j]; if T[i] < MinSpending then if i < n then begin Free[j] := False; Try(i + 1); Free[j] := True; end else if T[n] + C[x[n], 1] < MinSpending then begin BestWay := X; MinSpending := T[n] + C[x[n], 1]; end; end; end; procedure PrintResult; var i: longint; f: Text; begin Assign(f, OutputFile); Rewrite(f); if MinSpending = maxC then WriteLn(f, 'NO SOLUTION') else for i := 1 to n do Write(f, BestWay[i], '->'); WriteLn(f, 1); WriteLn(f, 'Cost: ', MinSpending); Close(f); end; begin Enter; Init; Try(2); PrintResult; end. 4. Tour du lịch của Sherry ( http://vn.spoj.pl/problems/LEM3 ) Trong kì nghỉ hè năm nay sherry được bố thưởng cho 1 tour du lịch quanh N đất nước tươi đẹp với nhiều thắng cảnh nổi tiếng ( vì sherry rất ngoan ). Tất nhiên sherry sẽ đi bằng máy bay. Giá vé máy bay từ đất nước i đến đất nước j là C ij ( dĩ nhiên C ij có thể khác C ji ). Tuy được bố thưởng cho nhiều tiền để đi du lịch nhưng sherry cũng muốn tìm cho mình 1 hành trình với chi phí rẻ nhất có thể để dành tiền mua quà về tặng mọi người ( Các chuyến bay của sherry đều được đảm bảo an toàn tuyệt đối ). Bạn hãy giúp sherry tìm 1 hành trình đi qua tất cả các nước, mỗi nước đúng 1 lần sao cho chi phí là bé nhất nhé. Input Dòng 1: N (5 < N < 16) Dòng thứ i trong N dòng tiếp theo: Gồm N số nguyên, số thứ j là C ij (0 < C ij < 10001) Output Gồm 1 dòng duy nhất ghi chi phí bé nhất tìm được Example 5. Chấm điểm ( http://vn.spoj.pl/problems/V8SCORE ) Có N vị giám khảo trong kỳ thi chọn đội tuyển tin học. Kỳ thi bao gồm K bài. Vị giám khảo thứ i đề nghị số điểm của bài j là A ij . Hội đồng giám khảo muốn xác định số điểm cho mỗi bài sao cho: Tổng số điểm bằng S. Điểm của mỗi bài không bé hơn điểm của bài trước đó. Số điểm của mỗi bài bằng điểm đề nghị cho bài này của một vị giám khảo nào đó. Dữ liệu Dòng đầu tiên chứa ba số nguyên S (1 ≤ S ≤ 200), (1 ≤ K ≤ 20), (1 ≤ N ≤ 20). Dòng thứ i trong số N dòng tiếp theo chứa K số nguyên, số thứ j cho biết giá trị A ij là số điểm vị giám khảo thứ i đề nghị cho bài thứ j. Kết qủa Nếu tồn tại một cách cho điểm thỏa mãn yêu cầu: o Dòng thứ nhất: in ra 'YES'. o Dòng thứ hai: in ra K số nguyên là điểm của mỗi bài tìm được. Nếu không tồn tại cách cho điểm, in ra 'NO'. Input: Output: 6 0 1 2 1 3 4 5 0 3 2 3 4 4 1 0 2 1 2 4 2 5 0 4 3 2 5 3 5 0 2 5 4 3 3 1 0 8 Ví dụ Hướng dẫn: Kết quả của bài toán (nếu có) sẽ có dạng X 1 X 2 …X k . Trong mỗi bước duyệt, ta sẽ thử chọn X i trong tập A ji (1 <= j <= n). Sau khi chọn X i , ta có thể đánh giá được S min (tổng điểm bé nhất có thể đạt được khi duyệt xong) bằng dữ kiện dãy X tăng dần. S min (tổng điểm khi chọn xong) = P[i] + X[i] * (k-i) với P[i] là tổng điểm đã có - S min <= S : duyệt tiếp bài toán vẫn có thể có nghiệm - S min > S : vô nghiệm Đó cũng chính là cận trong quá trình duyệt để chương trình có thể chạy trong thời gian cho phép! 6. Hoán vị chữ cái ( http://vn.spoj.pl/problems/QBHV ) Cho một xâu S chỉ gồm các chữ cái in hoa, 1 <= độ dài <= 9. Yêu cầu: 1: Có bao nhiêu cách hoán vị các chữ cái của xâu S 2: Liệt kê các hoán vị đó theo thứ tự từ điển Input Gồm 1 dòng duy nhất chứa xâu S Output Dòng 1: Ghi số lượng hoán vị tìm được (K) K dòng tiếp theo, mỗi dòng ghi một xâu hoán vị của xâu S theo đúng thứ tự từ điển Example Input: ABAB Output: 6 AABB ABAB ABBA BAAB BABA BBAA Dữ liệu Kết quả 100 3 2 30 20 40 50 30 50 YES 30 30 40 100 2 3 1 1 2 2 3 3 NO Hướng dẫn: Hai yêu cầu cần giải quyết của bài toán này chính là số lượng cấu hình thỏa mãn và liệt kê các cấu hình đó. Nếu như duyệt 2 lần, lần thứ nhất để đếm số lượng và lần thứ 2 để liệt kê các cấu hình thì chương trình sẽ chạy quá thời gian cho phép. Bởi thế, ta nên tìm cách đếm số cấu hình mà không cần phải duyệt quay lui. Công thức: Result = N! div (Count[ch]) với N là độ dài của S và Count[ch] là số lần xuất hiện của ký tự "ch". 7. Quan hệ ( http://vn.spoj.pl/problems/COND ) Xét một tập N đối tượng có thể so sánh được (2<=n<=10). Giữa 2 đối tượng a và b có thể tồn tại 1 trong 3 quan hệ phân loại: a = b; a < b; a > b; Như vậy, với 3 đối tượng (a, b, c) có thể tồn tại 13 quan hệ phân loại như sau: a = b = c; a = b < c; c < a = b; a < b = c b = c < a; a = c < b; b < a = c; a < b < c a < c < b; b < a < c; b < c < a; c < a < b c < b < a; Cho số n, hãy xác định số lượng quan hệ phân loại khác nhau. Input Gồm nhiều số n. Mỗi số trên 1 dòng. Kết thúc file là -1. Output Với mỗi n, đưa ra số lượng quan hệ phân loại tìm được, mỗi số trên 1 dòng (không có dòng trống). Example Input: 2 3 -1 Output: 3 13 Hướng dẫn: Bài này là một bài toán đếm tổ hợp. Bạn nhận xét một quan hệ phân loại sẽ có dạng ( = = ) < ( = = ) < < ( = = ) tức là chia thành các nhóm bằng nhau Giả sử có k nhóm và gọi số phần tử trong mỗi nhóm là a1, a2, , ak. Điều kiện: a1 + a2 + + ak <= n Thế thì số quan hệ phân loại loại này bằng: n! / (a1! * a2! * a3! * * ak!) Tóm lại công thức cuối cùng bằng: Sum ( n! / (a1! * a2! * * ak!) | a1 + a2 + + ak <= n) 8. Quan hệ có điều kiện (http://vn.spoj.pl/problems/QBCOND ) Ngày nay khi nghiên cứu quan hệ giữa các phần tử các nhà khoa học không đơn giản chỉ nghiên cứu các quan hệ bình thường mà để thêm phần phức tạp là thêm vào đó 1 vài bộ điều kiện. Một trong những điều kiện đó là số quan hệ '=' Như ta đã biết giữa 2 phần tử a, b sẽ có 3 quan hệ: a = b, a > b, a < b. Các nhà khoa học đưa ra 1 bộ gồm n phần tử. Sau khi tìm ra số lượng các quan hệ của n phần tử này họ muốn biết nếu như số quan hệ '=' trong tập n phần tử này đúng bằng k thì sẽ có bao nhiêu quan hệ như thế? Input Gồm nhiều bộ số n, k. Mỗi bộ số trên 1 dòng. Kết thúc file là -1. ( 1 < n < 11 ) Output Với mỗi bộ số (n, k) đưa ra số quan hệ có điều kiện tìm được Example Input: 3 0 3 1 3 2 3 3 -1 Output: 6 6 0 1 Giải thích: Với bộ 3 phần tử (a, b, c). n=3, k=0: a < b < c; a < c < b; b < a < c; b < c < a; c < a < b; c < b < a; n=3, k=1: a = b < c; c < a = b; a < b = c b = c < a; a = c < b; b < a = c; n=3, k=3: a = b = c; [...]... xét qua các bài toán sau để tìm hiểu về ứng dụng của xử lý bit 1 Số đặc biệt: Xét một dãy gồm N số nguyên A1, A2, A3, An Trong dãy số trên có 1 số chỉ xuất hiện đúng một lần, và các số còn lại xuất hiện một số chẵn lần Yêu cầu: Hãy tìm số đặc biệt của một dãy cho trước Dữ liệu: Trong file văn bản SDB gồm: - Dòng đầu là số N (N ≤ 107) - N dòng tiếp, dòng thứ i là Ai với |Ai| ≤ 109 Kết quả: Một dòng duy... http://vn .spoj. pl/problems/VECTOR ) Trong mặt phẳng tọa độ có N véc tơ Mỗi một véc tơ được cho bởi hai chỉ số x và y Tổng của hai véc tơ (xi, yi) và (xj, yj) được định nghĩa là một véc tơ (xi + xj, yi + yj) Bài toán đặt ra là cần chọn một số véc tơ trong N véc tơ đã cho sao cho tổng của các vec tơ đó là véc tơ (U, V) Yêu cầu: Đếm số cách chọn thoả mãn yêu cầu bài toán đặt ra ở trên Input Dòng thứ nhất ghi số. .. là số cần tìm Ví dụ: SDB.INP SDB.OUT 5 2 1 2 3 3 1 Hướng dẫn: Lần lượt thực hiện phép XOR số thứ 1 với số thứ 2, lấy kết quả thực hiện với số thứ 3 và cứ thế cho hết N số Vì phép XOR là phép “triệt tiêu”, do đó kết quả cuối cùng là số chỉ xuất hiện 1 lần (không bị triệt tiêu) Bằng cách biểu diễn các số dưới dạng nhị phân rồi thực hiện phép XOR, các bạn có thể dễ dàng chứng minh được thuật toán trên. .. http://vn .spoj. pl/problems/VSTEPS ) Bờm chơi trò chơi điện tử Lucky Luke đến màn phải điều khiển Lucky leo lên một cầu thang gồm n bậc Các bậc thang được đánh số từ 1 đến n từ dưới lên trên Lucky có thể đi lên một bậc thang, hoặc nhảy một bước lên hai bậc thang Tuy nhiên một số bậc thang đã bị thủng do cũ kỹ và Lucky không thể bước chân lên được Biết ban đầu, Lucky đứng ở bậc thang số 1 (bậc thang số 1... 104), j = 1, 2, , n Kết quả Ghi ra trên một dòng duy nhất độ dài của dãy con chung không liền kề dài nhất của hai dãy A và B Input: 45 4 9 2 4 1 9 7 3 4 Output: 2 Hướng dẫn: Đây là bài số 1 trong đề thi HSG QG Tin học năm 2010 Bài toán này hoàn toàn tương tự với bài toán 16 Các bạn tự code! 18 Đoạn cao trào của bản nhạc ( http://vn .spoj. pl/problems/NKTHEME ) Trong một bản nhạc thường có những đoạn nhạc... sẽ xét đến chuỗi các bài toán QHĐ liên quan tới dãy số, bảng số 20 Dãy con dài nhất ( http://vn .spoj. pl/problems/NKMAXSEQ ) Cho dãy số nguyên a1, a2, …, an Dãy số ai, ai+1, …, aj với 1 ≤ i ≤ j ≤ n được gọi là dãy con của dãy số đã cho và khi đó, j-i+1 được gọi là độ dài, còn ai+ai+1 +aj được gọi là trọng lượng của dãy con này Yêu cầu: cho số nguyên p, trong số các dãy con của dãy số đã cho có trọng lượng... trên Input Dòng thứ nhất ghi số N (0 ≤ N ≤ 30) N dòng tiếp theo, dòng thứ i ghi các số nguyên xi, yi lần lượt là hai chỉ số của véc tơ thứ i (|xi|, |yi| ≤ 100) Dòng cuối cùng ghi số hai số nguyên U V (|U|, |V| ≤ 109) Output Gồm một số duy nhất là số cách chọn thoả mãn Example Input: 4 0 0 -1 2 2 5 3 3 2 5 Output: 4 Hướng dẫn: Nếu duyệt tổ hợp của N vector thì độ phức tạp của thuật toán là 2^N và chương... liệu Dòng đầu tiên: gồm 2 số nguyên n và k, là số bậc của cầu thang và số bậc thang bị hỏng (0 ≤ k < n ≤ 100000) Dòng thứ hai: gồm k số nguyên cho biết chỉ số của các bậc thang bị hỏng theo thứ tự tăng dần Kết quả In ra phần dư của số cách Lucky leo hết cầu thang khi chia cho 14062008 Ví dụ Dữ liệu 42 23 Kết qủa 0 Dữ liệu 90000 1 49000 Kết qủa 4108266 Hướng dẫn: Gọi F[i] là số cách để tới được bậc thang... mà họ ngồi trên xe Cước phí cần trả để đi đoạn đường độ dài i là Ci(i=1,2 B) Một du khách xuất phát từ 1 bến nào đó muốn đi dạo L km theo tuyến nói trên Hỏi ông ta phải lên xuống xe như thế nào để tổng số tiền phải trả là nhỏ nhất có thể Dữ liệu vào: Dòng đầu ghi 2 số nguyên dương B, L Dòng thứ i trong số B dòng tiếp theo ghi 1 số nguyên dương Ci ( 1 ≤ i ≤ B ) Kết qủa Một dòng duy nhất là số tiền nhỏ... Dữ liệu vào gồm 2 dòng: Dòng 1: Hai số nguyên dương N (số phần tử của tập hợp mệnh giá tiền) và S (số tiền cần đổi) (1 ≤ N ≤ 100; 1 ≤ S ≤ 109 ) Dòng 2: N số nguyên dương biểu thị mệnh giá của các phần tử trong tập hợp (giá trị không vượt quá 100) Output Dữ liệu ra gồm một số nguyên duy nhất là số đồng tiền ít nhất có thể đổi được Example Input: 23 12 Output: 2 Hướng dẫn: Với S khá lớn, ta sẽ dùng thuật . K bài. Vị giám khảo thứ i đề nghị số điểm của bài j là A ij . Hội đồng giám khảo muốn xác định số điểm cho mỗi bài sao cho: Tổng số điểm bằng S. Điểm của mỗi bài không bé hơn điểm của bài. trị có được từ số nguyên x sau khi dịch sang trái i bit. Với x = 2 ta có: Trên đây là một số phép toán làm việc trên các bit mà ta hay dùng, trên cơ sở đó, ta xây dựng được một số hàm, thủ. có 1 số chỉ xuất hiện đúng một lần, và các số còn lại xuất hiện một số chẵn lần. Yêu cầu: Hãy tìm số đặc biệt của một dãy cho trước. Dữ liệu: Trong file văn bản SDB gồm: - Dòng đầu là số N

Ngày đăng: 23/11/2014, 04:55

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan