10404 - Bachet's Game
Posted: Tue Nov 12, 2002 2:52 pm
These two programs in Pascal and C solve task 10404 absolutely identically, but first (Pascal) get WA, and second (C) get Accepted.
Does anybody know, why it could be so?
[/pascal]
const
MN=2000000;
type
integer = longint;
var
N,K,i : integer;
W : array [1..20] of integer;
Winner : array [0..MN] of integer;
var
WW : longint;
A,ii : longint;
Good, canWin : boolean;
begin
while not eof do begin
Read(N);
Read(K);
for i:=1 to K do begin
Read(W);
end;
Winner[0]:=1;
for A:=1 to N do begin
canWin:=False;
for ii:=1 to K do
if W[ii]<=A then
begin
if Winner[A-W[ii]]<>0 then begin
canWin:=True; break
end;
end;
if canWin then Winner[A]:=0 else Winner[A]:=1;
end;
if Winner[N]=0 then WriteLn('Stan wins') else WriteLn('Ollie wins');
end;
end.
[c]
#include <stdio.h>
#define CST 2000000
int main () {
long N,K,i,ii;
long W[20];
long Win[CST];
int flag;
while (scanf("%ld",&N)==1) {
scanf("%ld",&K);
for (i=K;i--;) {scanf("%ld",&W);}
Win[0] = 1;
for (i=1;i<N+1;i++) {
flag = 0;
for (ii=K;ii--;) {
if (W[ii]<=i) {
if (Win[i-W[ii]]) {
flag=1;
break;
}
}
}
if (flag) Win=0; else Win=1;
}
if (Win[N]) printf("Ollie wins\n"); else printf("Stan wins\n");
}
return 0;
}[/code][/c]
Does anybody know, why it could be so?
[/pascal]
const
MN=2000000;
type
integer = longint;
var
N,K,i : integer;
W : array [1..20] of integer;
Winner : array [0..MN] of integer;
var
WW : longint;
A,ii : longint;
Good, canWin : boolean;
begin
while not eof do begin
Read(N);
Read(K);
for i:=1 to K do begin
Read(W);
end;
Winner[0]:=1;
for A:=1 to N do begin
canWin:=False;
for ii:=1 to K do
if W[ii]<=A then
begin
if Winner[A-W[ii]]<>0 then begin
canWin:=True; break
end;
end;
if canWin then Winner[A]:=0 else Winner[A]:=1;
end;
if Winner[N]=0 then WriteLn('Stan wins') else WriteLn('Ollie wins');
end;
end.
[c]
#include <stdio.h>
#define CST 2000000
int main () {
long N,K,i,ii;
long W[20];
long Win[CST];
int flag;
while (scanf("%ld",&N)==1) {
scanf("%ld",&K);
for (i=K;i--;) {scanf("%ld",&W);}
Win[0] = 1;
for (i=1;i<N+1;i++) {
flag = 0;
for (ii=K;ii--;) {
if (W[ii]<=i) {
if (Win[i-W[ii]]) {
flag=1;
break;
}
}
}
if (flag) Win=0; else Win=1;
}
if (Win[N]) printf("Ollie wins\n"); else printf("Stan wins\n");
}
return 0;
}[/code][/c]