示例#1
0
        public static double GetScore(Ride ride, Coordinate location, long currTime, ProblemInput input)
        {
            long distance     = GetDistance(ride.Start, location);
            long minStartTurn = Math.Max(currTime + distance, ride.StartTime);
            long timeToStart  = minStartTurn - currTime;

            timeToStart = timeToStart < 0 ? 0 : timeToStart;

            if (IsNotValid(ride, input, minStartTurn, timeToStart))
            {
                return(double.MaxValue);
            }

            // double scoreWithoutBonus = timeToStart;
            double scoreWithoutBonus = timeToStart / Math.Pow(ride.Distance, 0.4);  // good for c

            if (currTime + distance <= ride.StartTime)
            {
                // return scoreWithoutBonus - Math.Sqrt(input.Bonus);
                return(scoreWithoutBonus - Math.Sqrt(input.Bonus) + Math.Log(ride.Distance)); //   good for d for some reason
                // scoreWithoutBonus /= Math.Sqrt(input.Bonus);
            }

            return(scoreWithoutBonus);
        }
示例#2
0
 private static bool IsNotValid(Ride ride, ProblemInput input, long minStartTurn, long timeToStart)
 {
     return(timeToStart < 0 || minStartTurn + ride.Distance >= ride.LatestFinish || minStartTurn + ride.Distance >= input.NumberOfSteps + 1);
 }