Pascal pogresno stampa resenje u zadatku


#1

Pitanje ili opis problema

[koristite ovaj template za postavljanje tema u kategoriji Pitanja i problemi]

Pascal iz nekog razloga nece lepo da odstampa dobar odgovor za prvi zadatak iz okruznog takmicenja 2017. godine (“Krompir”)

program MattDamon;
var a:array[1…1000000] of byte;
b:array[1…1000000] of byte;
n,m,i,j,x,y,nx,ny:longint;
s:int64;
begin
nx:=0;
ny:=0;
read(n,m);
for i:=1 to n do
begin
a[i]:=0;
b[i]:=0;
end;
for i:=1 to m do
begin
read(x,y);
a[x]:=1;
b[y]:=1;
end;
for i:=1 to n do
begin
nx:=nx+a[i];
ny:=ny+b[i];
end;
s:=nxn+ny(n-nx);
write(s);
end.

Za vrednosti iz test primera 14 program treba da odstampa 3105873496, ali program uvek izračuna -1189093800. Ručno sam proverio formulu nx * n+ny(n-nx) koja se koristi za promenljivu s tako da je formula sigurno dobra što znači da je verovatno došlo do overflow-a, ali čak i pretvaranje promenljive s u INT64 nije rešilo problem.

Zadatak: https://petlja.org/biblioteka/r/problemi/takmicenja-srednje-skole/01_krompir

Link ka zadatku ili odgovarajućoj stranici


#2

Rešio sam problem tako što sam one promenljive koje se pojavljuju u formuli za s promenio da budu tipa QWord
program MattDamon;
var a:array[1…1000000] of byte;
b:array[1…1000000] of byte;
m,i,j,x,y:longint;
nx,ny,n:qword;
s:qword;
begin
nx:=0;
ny:=0;
read(n,m);
for i:=1 to n do
begin
a[i]:=0;
b[i]:=0;
end;
for i:=1 to m do
begin
read(x,y);
a[x]:=1;
b[y]:=1;
end;
for i:=1 to n do
begin
nx:=nx+a[i];
ny:=ny+b[i];
end;
s:=nxn+ny(n-nx);
write(s);
end.