Skip to content

Instantly share code, notes, and snippets.

@abeaumont
Last active May 1, 2017 08:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abeaumont/ee053970fbd9897c519ec43be24a99b2 to your computer and use it in GitHub Desktop.
Save abeaumont/ee053970fbd9897c519ec43be24a99b2 to your computer and use it in GitHub Desktop.
GCJ 2017 Round 1C. Problem C. Core Training
import util, mip.
go(T, N, K, U, Xs) =>
X = new_array(N),
X :: 0.0..1.0,
foreach(I in 1..N)
X[I] #>= Xs[I],
X[I] #<= Xs[I] + U
end,
sum(X) #<= sum(Xs) + U,
S #= prod([1.0 - X[I] : I in 1..N]),
solve($[max(S)], [S, X]),
printf(stderr, "Case #%d: %f\n", T, S).
go2(T, N, K, U, Xs) =>
X = new_array(N),
X :: 0.0..1.0,
Y = new_array(N),
Y :: 0..1,
foreach(I in 1..N)
X[I] #>= Xs[I],
X[I] #<= Xs[I] + U
end,
sum(X) #<= sum(Xs) + U,
sum(Y) #= K,
S #= prod([1.0 - (X[I] * Y[I]) : I in 1..N]),
solve($[max(S)], [S, X, Y]),
printf(stderr, "Case #%d: %f\n", T, S).
go3(T, N, K, U, Xs) =>
X = new_array(N),
X :: 0.0..1.0,
foreach(I in 1..N)
X[I] #>= Xs[I],
X[I] #<= Xs[I] + U
end,
sum(X) #<= sum(Xs) + U,
Z = new_array(N+1),
Z :: 0.0..1.0,
Z[1] = 1.0,
foreach(I in 2..N+1)
Z[I] #= Z[I - 1] * (1.0 - X[I-1])
end,
S #= Z[N+1],
solve($[max(S)], [S, X, Z]),
printf(stderr, "Case #%d: %f\n", T, S).
main() =>
[T] = [X.to_number() : X in readln().split()],
foreach(I in 1..T)
[N, K] = [X.to_number() : X in readln().split()],
[U] = [X.to_number() : X in readln().split()],
Xs = [X.to_number() : X in readln().split()],
go3(I, N, K, U, Xs)
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment