1. Trang chủ
  2. » Giáo án - Bài giảng

de thi thi lap trinh

5 738 9
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 38 KB

Nội dung

Ta gọi k-phân đoạn của dãy số đã cho là cách chia dãy số đã cho ra thành k đoạn, mỗi đoạn là một dãy con gồm các phần tử liên tiếp của dãy.. Yêu cầu: Hãy xác định số M nhỏ nhất để tồn tạ

Trang 1

Bài 1: Phân đoạn Tên file chương trình: SEGPAR.PAS

Cho dãy số nguyên a 1 , a 2 …,a n và số nguyên dương k Ta gọi k-phân đoạn của dãy số đã cho là cách chia dãy số đã cho ra thành k đoạn, mỗi đoạn là một dãy con gồm các phần tử liên tiếp của dãy Chính xác hơn, một k-phân đoạn được xác định bởi dãy chỉ số

1 ≤ n1 < n 2 < … < n k = n.

Đoạn thứ i là dãy con a n i 1,a n i 2, ,a n i

1

, i = 1,2,…,k Ở đây ta quy ước n 0 = 0

Yêu cầu: Hãy xác định số M nhỏ nhất để tồn tại k-phân đoạn sao cho tổng các phần tử trong

mỗi đoạn đều không vượt quá M.

Dữ liệu: Vào từ file văn bản SEGPAR.INP.

- Dòng đầu tiên chứa hai số nguyên n và k (1 ≤ k ≤ n ≤ 15000);

- Dòng thứ i trong số n dòng tiếp theo chứa số nguyên a i (|a i| ≤ 30000), i =1, 2, …,n

Các số cạnh nhau trên một dòng trong file dữ liệu cách nhau ít nhât một dấu cách

Kết quả: Ghi ra file SEGPAR.OUT một số nguyên duy nhất là giá trị trị M tìm được.

Ví dụ:

SEGPAR.INP

9 4

1

1

1

3

2

2

1

3

1

SEGPAR.OUT

5

Tập đoàn Công nghệ Amser nổi tiếng hiện có N nhân viên Dưới thời tổng giám đốc cũ, Huluxima gán cho mỗi nhân viên i (i = 1, 2, , N) một mã IP là một số nguyên dương Ai (tất nhiên 2 nhân viên khác nhau sẽ có số IP khác nhau) Hiện nay, Tổng giám đốc mới lên nắm quyền là Buđata rất chú trọng tới sự ngăn nắp và qui củ nên ông muốn ngay cả các số IP của nhân viên cũng phải được cân nhắc kỹ càng Khi có thêm một nhân viên mới, ông ta muốn biết số IP nhỏ nhất còn có thể gán cho nhân viên đó

Trang 2

Yêu cầu: Cho N mã IP của các nhân viên trong tập đoàn, hãy tìm mã IP nhỏ nhất chưa xuất

hiện cho tập N mã đã cho

Dữ liệu: Trong file văn bản IP.INP gồm

- Dòng đầu là N (0 ≤ N ≤ 108)

- N dòng tiếp theo, dòng thứ i ghi số Ai (i = 1 N, 1 ≤ Ai ≤ 109)

Kết quả: Ra file văn bản IP.OUT gồm một số duy nhất là mã IP tìm được

Ví dụ:

IP.INP IP.OUT

3

3

1

4

2

{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+}

{$M 16384,0,655360}

program Ma_Ip;

const fi =’ip.inp’;

fo =’ip.out’;

type mang =array[0 31249] of word;

var ip,n :longint;

a :mang;

procedure turnon(var x:word;y:byte);

begin

x:=x or (1 shl y);

end;

function getbit(x:word;y:byte):byte;

begin

getbit:=(x shr y) and 1;

end;

procedure main;

var s,i,min,max :longint;

kx,j :byte;

f :text;

begin

for kx:=0 to 200 do

begin

fillchar(a,sizeof(a),0);

turnon(a[0],0);

min:=kx*500000;

max:=(kx+1)*500000;

Trang 3

readln(f,n);

for i:=1 to n do

begin

read(f,s);

if (s>=min) and (s

begin

s:=s-min;

turnon(a[s shr 4],s and 15);

end;

end;

close(f);

assign(f,fo);rewrite(f);

for i:=0 to 31249 do

if a[i]<>65535 then

for j:=0 to 15 do

if getbit(a[i],j)=0 then

begin

ip:=min+i*16+j;

writeln(f,ip);

close(f);halt;

end;

end;

close(f);

end;

begin

main;

end

Bài 3: Dãy tam giác bao nhau Tên file chương trình: TAMGIAC.PAS

Cho n tam giác trên mặt phẳng Hãy tìm dãy các tam giác bao nhau nhiều nhất biết rằng tam giác i bao tam giác j nếu 3 đỉnh của tam giác j đều nằm trong hoặc nằm trên cạnh của tam giác i

Input: File Tamgiac.inp

- Dòng thứ nhất ghi số N (1 < N < 10000)

- N dòng tiếp theo dòng thứ i ghi 6 số nguyên là toạ độ 3 đỉnh của tam giác i

Output: File Tamgiac.out

Gồm một dòng chứa các số hiệu tam giác bao nhau

Ví dụ:

Trang 4

0 0 0 1 1 0

1 1 1 2 2 1

0 0 0 3 3 0

5 0 7 0 0 3

Program tamgiacbaonhau;

const fi='tamgiac.inp';

fo='tamgiac.out';

maxn=100;

epsilon=0.000001;

type diem=record

x,y:real;

end;

var a:array[1 maxn]of word;

tamgiac:array[1 6]of diem;

fx:array[1 maxn] of integer;

trace:array[1 maxn] of integer;

i,j,luu:word;

s,ss,sss:real;

n:word;

Procedure dientich;

var i:integer;

begin

S:=0;

for i:=1 to 3 do

S:=S+(tamgiac[i].x-tamgiac[i+1].x)*(tamgiac[i].y+tamgiac[i+1].y); S:=abs(S/2);

end;

Procedure input;

var f:text;k,j:integer;

begin

assign(f,fi);

reset(f);

readln(f,n);

a[1]:=1;

for i:=1 to 3 do read(f,tamgiac[i].x,tamgiac[i].y);

tamgiac[5]:=tamgiac[1];

readln(f);

for k:=2 to n do

begin

for i:=1 to 3 do read(f,tamgiac[i].x,tamgiac[i].y);

tamgiac[4]:=tamgiac[1];

dientich;

ss:=s;

tamgiac[4]:=tamgiac[5];sss:=0;

for j:=1 to 3 do

begin

tamgiac[6]:=tamgiac[j];

tamgiac[j]:=tamgiac[5];

dientich;sss:=sss+s;

tamgiac[j]:=tamgiac[6];

tamgiac[4]:=tamgiac[1];

end;

if abs(sss-ss)<epsilon then a[k]:=a[k-1]+1

else a[k]:=1;

Trang 5

end;

close(f);

end;

procedure Init;

begin

fillchar(fx,sizeof(fx),1);

fillchar(trace,sizeof(trace),0);

end;

procedure Solve;

begin

for i:=2 to N do

begin

for j:=i-1 downto 1 do

if (A[j]<A[i]) and (fx[i]<fx[j]+1) then begin

fx[i]:=fx[j]+1;

trace[i]:=j;

end;

end;

end;

procedure WriteH(i:Word);

begin

if i >0 then

begin

WriteH(trace[i]);

write(i,' ');

end;

end;

procedure Print;

begin

assign(output,fo);

rewrite(output);

Luu:=N;

for i:=N-1 downto 1 do

If fx[i]>fx[Luu] then Luu:=i;

WriteH(Luu);

close(output);

end;

begin

Input;

Init;

Solve;

Print;

end.

Ngày đăng: 04/08/2013, 01:27

TỪ KHÓA LIÊN QUAN

w