Đến nội dung

Hình ảnh

Chuỗi xuất hiện đúng 1 lần- kiểu file trong Pascal


  • Please log in to reply
Chủ đề này có 5 trả lời

#1
lyphuc2008

lyphuc2008

    Lính mới

  • Thành viên
  • 9 Bài viết

Cho trước tập tin văn bản INPUT.INP gồm nhiều dòng (không quá 1000 dòng), mỗi dòng chứa một chuỗi ký tự (gồm các chữ cái từ ‘A’ đến ‘Z’ viết dính liền với nhau), mỗi chuỗi dài không quá 255 ký tự. Trong tập tin này có duy nhất một chuỗi xuất hiện đúng một lần, các chuỗi còn lại đều xuất hiện đúng k lần. (Số k không cho trước, nhưng biết rằng k là một số chẵn và k≠0).

Yêu cầu:  Viết chương trình đọc tập tin INPUT.INP xử lý và tìm chuỗi duy nhất đó, ghi kết quả tìm được vào tập tin văn bản OUTPUT.OUT.

Kết quả:  Tập tin OUTPUT.OUT có một dòng là chuỗi ký tự tìm được theo yêu cầu.

Ví dụ:

              INPUT.INP                                              OUTPUT.OUT

             

               ABCD                                                          TINHOCTRE

               EFGHIJK

               TINHOCTRE

               ABCD

               EFGHIJK

File gửi kèm


Bài viết đã được chỉnh sửa nội dung bởi lyphuc2008: 02-07-2015 - 20:21


#2
lyphuc2008

lyphuc2008

    Lính mới

  • Thành viên
  • 9 Bài viết

các cao thủ đâu hết rồi giúp e với đi. hic hic



#3
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Bài này giới hạn của bạn đưa ra còn nhỏ, và trên VNSPOJ đã có.

Cách 1 là bạn sắp xếp những xâu đó theo một thứ tự nào đó. Rồi duyệt từ 1 đến N tìm xâu xuất hiện 1. (vì giới hạn N nhỏ nên làm được).

Cách 2: Dùng mảng đánh dâu: giả sử đó là mảng A: A: array[0..255,'A'..'Z'] of longint; với ý nghĩa A[i,char] là số chữ số char mà nằm ở vị trí i. Rồi duyệt xem với A[i,j] = 1 số lẻ thì ghi ra, vì nó là một ký tự của xâu xuất hiện 1 lần. 

=> Ưu tiên dùng cách 2 vì cách này có thể gọi là ok hơn với test lớn :P.



#4
lyphuc2008

lyphuc2008

    Lính mới

  • Thành viên
  • 9 Bài viết

Bài này giới hạn của bạn đưa ra còn nhỏ, và trên VNSPOJ đã có.

Cách 1 là bạn sắp xếp những xâu đó theo một thứ tự nào đó. Rồi duyệt từ 1 đến N tìm xâu xuất hiện 1. (vì giới hạn N nhỏ nên làm được).

Cách 2: Dùng mảng đánh dâu: giả sử đó là mảng A: A: array[0..255,'A'..'Z'] of longint; với ý nghĩa A[i,char] là số chữ số char mà nằm ở vị trí i. Rồi duyệt xem với A[i,j] = 1 số lẻ thì ghi ra, vì nó là một ký tự của xâu xuất hiện 1 lần. 

=> Ưu tiên dùng cách 2 vì cách này có thể gọi là ok hơn với test lớn :P.

Bạn có code không? mình làm mấy bữa nay mà không được. thank's bạn nhiều nha. :D



#5
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Đây là cách 2:
 

const   fi = 'input.inp';
        fo = 'output.out';
var     a: array[0..255,'A'..'Z'] of longint;
        s: string;
 
procedure process;
var
        i: longint;
        c: char;
begin
        fillchar(a,sizeof(a),0);
        while not eoln(input) do
          begin
                readln(s);
                for i:=1 to length(s) do inc(a[i,s[i]]);
          end;
        for i:=1 to 255 do
          for c:='A' to 'Z' do
            if a[i,c] mod 2<>0 then write(c);
end;
 
BEGIN
        assign(input,fi);       reset(input);
        assign(output,fo);      rewrite(output);
        process;
        close(input);           close(output);
END.


#6
lyphuc2008

lyphuc2008

    Lính mới

  • Thành viên
  • 9 Bài viết

thank bạn nhiều nha.






1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh