比赛 |
20141105 |
评测结果 |
C |
题目名称 |
韩信点兵 |
最终得分 |
0 |
用户昵称 |
WW TT |
运行时间 |
0.000 s |
代码语言 |
Pascal |
内存使用 |
0.00 MiB |
提交时间 |
2014-11-05 09:17:55 |
显示代码纯文本
var ans,t,bb,m,n:int64;
i,j:longint;
f:array[1..10,1..2] of int64;
procedure dfs(x,y,z:int64);
var i,j,te,tt,hx,bb:int64;
begin
if x=m then begin ans:=y;exit;end;
i:=1;
hx:=y mod f[x+1,1];
while i<=f[x+1,1] do
begin
te:=y mod f[x+1,1];
if (te=hx)and(i<>1) then begin writeln(-1);close(output);halt;end;
if te=f[x+1,2] then
begin
dfs(x+1,y,z*f[x+1,1]);
exit;
end;
y:=y+z;
i:=i+1;
end;
writeln(-1);close(output);halt;
end;
procedure init;
var b:array[1..2]of int64;
begin
readln(n,m);
t:=1;
for i:=1 to m do
begin
readln(f[i,1],f[i,2]);
t:=t*f[i,1];
end;
for i:=1 to m-1 do
for j:=i+1 to m do
if f[i,1]<f[j,1]
then begin b:=f[i];f[i]:=f[j];f[j]:=b;end;
bb:=f[1,1]+f[1,2];
dfs(1,bb,f[1,1]);
end;
begin
assign(input,'HanXin.in');
assign(output,'HanXin.out');
reset(input);
rewrite(output);
init;
if ans>n then begin writeln(-1);close(output);halt;end;
ans:=ans+((n-ans) div t)*t;
writeln(n-ans);
close(output);
end.