Chào mừng bạn đến với Selfomy Hỏi Đáp, hãy Hỏi bài tập hoặc Tham gia ngay
0 phiếu
260 lượt xem
thanhtrong trong Tin học lớp 9 bởi Thạc sĩ (6.2k điểm)

Một người sử dụng INTERNET đặt yêu cầu nhận thông tin về một số chủ đề khác nhau từ một số địa chỉ truy nhập. Chủ của các địa chỉ truy nhập này sẽ gửi thông tin yêu cầu vào hòm thư của người đặt hàng. Mỗi thông tin nhận được từ địa chỉ truy nhập sẽ được ghi vào một danh mục trong máy của người sử dụng dưới dạng một file mà để ngắn gọn ta sẽ gọi là một thông báo. Để thuận tiện cho việc tra cứu, người sử dụng quyết định xây dựng các cặp tài liệu, mỗi cặp chứa thông tin về cùng một chủ đề. Trước khi đọc tài liệu người sử dụng sẽ sao chép chúng từ danh mục các thông báo nhận được vào các cặp tương ứng.

Chương trình hộp thư điện tử gắn trên máy của người sử dụng cho phép sau "một thao tác" chuyển từ danh mục thông báo vào cặp tài liệu:

  • Một thông báo từ danh mục hoặc
  • Một dãy các thông báo liên tiếp nhau trong danh mục về cùng một chủ đề

Việc chuyển thông báo không nhất thiết phải bắt đầu từ đầu danh mục.

Cần tìm cách chuyển các thông báo trong danh mục vào các cặp tương ứng đòi hỏi số thao tác phải thực hiện là ít nhất.

Ví dụ: Giả sử người sử dụng muốn thu thập thông tin về các chủ đề A, B, C, D. Giả sử danh mục các thông báo nhận được theo trình tự thuộc về các chủ đề (A, C, D, C, B, B, C). Việc di chuyển vào cặp tài liệu có thể thực hiện như sau: Đầu tiên di chuyển hai thông báo B, khi đó danh mục còn lại là (A, C, D, C, C). Tiếp theo thực hiện việc di chuyển thông báo D, rồi thông báo A và cuối cùng di chuyển nốt 3 thông báo C liền nhau. Cách làm này đòi hỏi 4 thao tác.

Dữ liệu: Vào từ file văn bản EMAIL.INP gồm một dòng chứa số nguyên dương N (0

Kết quả: Ghi ra file EMAIL.OUT số thao tác ít nhất cần thực hiện.

Ví dụ:

EMAIL.INP

EMAIL.OUT

7 1 3 4 3 2 2 3

4

1 Câu trả lời

0 phiếu
thanhtrong bởi Thạc sĩ (6.2k điểm)
 
Hay nhất
{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+}
{$M 16384,0,655360}

uses crt;

const
   tfi                  =       'EMAIL.INP';
   tfo                  =       'EMAIL.OUT';
   maxN                 =       50;
   NN                   =       50;

type
   mang=array[1..maxN] of byte;

var
  fi,fo: text;
  N: integer;
  a: array[1..maxN] of byte;
  S: integer;
  b: array[1..maxN,1..maxN] of ^mang;

procedure Docdl;
var i: integer;
begin
   assign(fi,tfi); reset(fi);
   read(fi,N);
   for i:=1 to N do read(fi,a[i]);
   close(fi);
end;

function Tinh(u,v,k: integer): byte;
var T: byte;
    p,q,tt,tp,tc: integer;
begin
   if b[u,v]^[k]<>255 then
      begin
         Tinh:=b[u,v]^[k];
         exit;
      end;
   if u=v then
      begin
         b[u,v]^[k]:=1;
         Tinh:=1;
         exit;
      end;
   if k=u then
      begin
         T:=255;
         for q:=u+1 to v do
            begin
               tp:=Tinh(u+1,v,q);
               if a[q]<>a[u] then tp:=tp+1;
               if tp             end;
         b[u,v]^[k]:=T;
         Tinh:=T;
         exit;
      end;
   if k=v then
      begin
         T:=255;
         for p:=u to v-1 do
            begin
               tt:=Tinh(u,v-1,p);
               if a[p]<>a[v] then tt:=tt+1;
               if tt             end;
         b[u,v]^[k]:=T;
         Tinh:=T;
         exit;
      end;
   T:=255;
   for p:=u to k-1 do
      for q:=k+1 to v do
         begin
            tt:=Tinh(u,k-1,p);
            tp:=Tinh(k+1,v,q);
            if (a[p]=a[k]) and (a[k]=a[q]) then tc:=tt+tp-1 else
            if (a[p]=a[k]) and (a[k]<>a[q]) then tc:=tt+tp else
            if (a[p]<>a[k]) and (a[k]=a[q]) then tc:=tt+tp else
            tc:=tt+tp+1;
            if tc          end;
   b[u,v]^[k]:=T;
   Tinh:=T;
end;

procedure Solve;
var k,T: integer;
begin
   S:=maxInt;
   for k:=1 to N do
       begin
          T:=Tinh(1,n,k);
          if T        end;
end;

procedure Inkq;
begin
   assign(fo,tfo); rewrite(fo);
   writeln(fo,S);
   close(fo);
end;

procedure CapPhat;
var i,j,k: integer;
begin
   for i:=1 to NN do
      for j:=1 to NN do
         begin
            new(b[i,j]);
            for k:=1 to NN do b[i,j]^[k]:=255;
         end;
end;

BEGIN
   CapPhat;
   Docdl;
   Solve;
   Inkq;
END.

Các câu hỏi liên quan

0 phiếu
1 trả lời 848 lượt xem
Có N người xếp hàng mua vé. Ta đánh số họ từ 1 đến N theo thứ tự đứng trong hàng. Thời gian phục vụ bán vé cho người thứ i là ti. ... qui ước ghi số 0) Ví dụ TICK.INP TICK.OUT 5 2 5 7 8 4 3 9 10 10 17 2 4
đã hỏi 2 tháng 2, 2021 trong Tin học lớp 9 bởi thanhtrong Thạc sĩ (6.2k điểm)
+1 thích
1 trả lời 1.1k lượt xem
Trên hai đường thẳng song song L1 và L2 người ta đánh dấu trên mỗi đường N điểm. Các điểm trên đường thẳng L1 được đánh ... ; tăng dần. Ví dụ: WIRES.INP WIRES.OUT 9 2 5 3 8 7 4 6 9 1 5 2 3 4 6 9
đã hỏi 4 tháng 2, 2021 trong Tin học lớp 9 bởi thanhtrong Thạc sĩ (6.2k điểm)
+2 phiếu
2 câu trả lời 926 lượt xem
0 phiếu
1 trả lời 1.5k lượt xem
Có N khối đá hình hộp chữ nhật. Người ta muốn xây một cái tháp bằng cách chồng các khối đá này lên nhau. Để đảm bảo an toàn, các khối ... 1 5 4 2 7 2 9 2 1 3 3 5 5 5 4 1 5 7 5 9 5 5 5 5 5 5 1 4 2 4 2
đã hỏi 4 tháng 2, 2021 trong Tin học lớp 9 bởi thanhtrong Thạc sĩ (6.2k điểm)
0 phiếu
1 trả lời 814 lượt xem
Bưu cục Có một số làng nằm dọc theo một đường cao tốc. Đường cao tốc được biểu diễn bằng một trục số nguyên và vị trí mỗ ... một. Ví dụ: POST.INP POST.OUT 10 5 1 2 3 6 7 9 11 22 44 50 9 2 7 22 44 50
đã hỏi 13 tháng 7, 2021 trong Tin học lớp 9 bởi thanhtrong Thạc sĩ (6.2k điểm)
+3 phiếu
1 trả lời 376 lượt xem
Chào mọi người, đã một khoảng thời gian mình không đăng bài vì một số lý do cá nhân giờ mình sẽ tiếp tục với chuyên mục Mảng để mọi người ôn tập và nâng cao kiến thức về tin nhé!!!! Cảm ơn các bạn! Bài 1: Tính giá trị trung bình của tổng N số nguyên được nhập từ bàn phím!
đã hỏi 28 tháng 2, 2019 trong Tin học lớp 8 bởi supersmart2005 Cử nhân (2.6k điểm)
+2 phiếu
0 câu trả lời 607 lượt xem
Bài 1 (4,0 điểm). Khởi động chương trình PASCAL, viết chương trình nhập số tự nhiên n  sao cho 5 < n ≤100, nếu nhập sai yêu cầu nhập lại khi nào nhập đúng thì tính tổng sn: Bài 2 (6,0 điểm). Viết chương trình trên ngôn ngữ lập trình PASCAL, nhập vào hai số tự nhiên  x, y ... tăng gấp  đôi. Hỏi sau ít nhất là bao nhiêu bước sẽ thu  được số nguyên dương N?  Với N được nhâp từ bàn phím.            
đã hỏi 23 tháng 1, 2018 trong Tin học lớp 8 bởi lop6/7tk_2017 Học sinh (314 điểm)
0 phiếu
2 câu trả lời 2.8k lượt xem
Trong xã hội hiện nay con người sống với nhau rất thờ ơ trước nỗi đau cua người khác . Em hãy nêu cảm nhận của em về sự thờ ơ đó . (  bài văn dài 3/4 trang giấy )
đã hỏi 28 tháng 11, 2016 trong GD Công dân lớp 7 bởi ♬ ♪ ♥ Izanami ♥ ♪♫ Cử nhân (3.5k điểm)
+2 phiếu
1 trả lời 335 lượt xem
Bài 8: Viết chương trình nhập một bảng số 3x3 với điều kiện các số được nhập sẽ hiện lên màn hình đúng tại vị trí tương ứng của mình trên bảng số. Cố lên nào mọi người! :)
đã hỏi 27 tháng 3, 2019 trong Tin học lớp 8 bởi supersmart2005 Cử nhân (2.6k điểm)
+2 phiếu
1 trả lời 392 lượt xem
Bài 7: Nhập một số tự nhiên N và viết chương trình tạo mảng gồm N số nguyên tố đầu tiên. Nhanh lên nào ai làm xong nhanh và đúng nhất mình sẽ tick nhé!
đã hỏi 27 tháng 3, 2019 trong Tin học lớp 8 bởi supersmart2005 Cử nhân (2.6k điểm)

HOT 1 giờ qua

  1. trannhat900trannhat900

    52948 Điểm

  2. phamngoctienpy1987844phamngoctienpy1987844

    50728 Điểm

  3. vxh2k9850vxh2k9850

    35980 Điểm

  4. Nqoc_bakaNqoc_baka

    34614 Điểm

Phần thưởng hằng tháng
Hạng 1: 200.000 đồng
Hạng 2: 100.000 đồng
Hạng 3: 50.000 đồng
Hạng 4: 20.000 đồng
Phần thưởng bao gồm: mã giảm giá Shopee, Nhà Sách Phương Nam, thẻ cào cùng nhiều phần quà hấp dẫn khác sẽ dành cho những bạn tích cực nhất của tháng. Xem tại đây
Bảng xếp hạng cập nhật 30 phút một lần
...