Tải bản đầy đủ (.doc) (5 trang)

de thi thi lap trinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (83.03 KB, 5 trang )

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 ≤ n
1
< n
2
< … < n
k
= n.
Đoạn thứ i là dãy con
iii
nnn
aaa ,...,,
21
11
++
−−
, 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
Bài 2: Mã nhân viên Tên file chương trình: SEGPAR.PAS
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 A
i
(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à Bata 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 đó.
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 ≤ 10
8
).
- N dòng tiếp theo, dòng thứ i ghi số A
i
(i = 1..N, 1 ≤ A
i
≤ 10
9
).
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;
assign(f,fi);reset(f);
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ụ:
Tamgiac.inp Tamgiac.out
4 2 3

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;
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.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×