|
MOVIES 8 năm trước
|
(+0)
|
mọi người cho em hỏi bài này em sai ở test nào ạ.
em sắp xếp lại các phần tử trong một hàng lại rồi kiểm tra xem khoảng cách giữa hai pt liên tiếp có >2 ko, nếu có thì cộng vào res, trước đó res = (m - 1) * (n - số hàng toàn ghế trống)
nhân tiện cho em hỏi input các hàng có được cho theo thứ tự ko ạ ?
đây là code của em ạ, cảm ơn mọi người.
Code: | {$MODE OBJFPC}
const
fi = 'movies.inp';
fo = 'movies.out';
maxm = 50;
type
arr = array[0..maxm] of integer;
data = record
gt : integer;
sl : integer;
ch : arr;
end;
var
s : ansistring;
ip, op : text;
m, n, res : int64;
ca : integer;
a : array[0..maxm] of data;
lt : arr;
procedure input;
var
t : ansistring;
sh, kt, i, j, xd1, xd2, v : integer;
begin
readln(ip,n);
readln(ip,m);
readln(ip,t);
xd1 := 0;
for i := 1 to maxm do
begin
a[i].gt := 0;
a[i].sl := 0;
for j := 0 to maxm do
a[i].ch[j] := 0;
end;
ca := 0;
a[0].gt := -1;
while not eof(ip) do
begin
readln(ip,t);
if t = '>>' then break;
inc(xd1);
val(t,sh,kt);
if sh = a[ca].gt then
inc(a[ca].sl)
else
begin
inc(ca);
inc(a[ca].sl);
a[ca].gt := sh;
end;
end;
readln(ip,t);
xd2 := 0;
v := 1;
for i := 1 to xd1 do
begin
readln(ip,sh);
inc(xd2);
a[v].ch[xd2] := sh;
if xd2 = a[v].sl then
begin
inc(v);
xd2 := 0;
end;
end;
readln(ip,t);
end;
procedure swap(var x,y : integer);
var
temp : integer;
begin
temp := x;
x := y;
y := temp;
end;
procedure sort(var m:arr; l,r : integer);
var
i, j, x : integer;
begin
if l>=r then exit;
i := l;
j := r;
x := m[(l+r) div 2];
repeat
while m[i]<x do i := i+1;
while x<m[j] do j := j-1;
if i<=j then
begin
swap(m[i],m[j]);
i := i+1;
j := j-1;
end;
until (i>j);
sort(m,l,j);
sort(m,i,r);
end;
procedure solve;
var
i, j, l : integer;
temp : int64;
begin
res := (n - ca) * (m - 1);
for i := 1 to ca do
begin
lt := a[i].ch;
l := a[i].sl;
sort(lt,1,l);
lt[0] := 0;
lt[l+1] := m+1;
for j := 1 to l+1 do
begin
temp := lt[j] - lt[j-1] - 2;
if temp > 0 then
res := res + temp;
end;
end;
writeln(op,res);
end;
procedure process;
begin
while not eof(ip) do
begin
readln(ip,s);
if s = '[END]' then break;
if s = '[CASE]' then
begin
input;
solve;
end;
end;
end;
begin
assign(ip,fi); reset(ip);
assign(op,fo); rewrite(op);
process;
close(ip);
close(op);
end.
|
|
|