Exemple #1
0
        static void Solve(string[] args)
        {
            var input = File.ReadAllLines("input.txt");
            var n     = int.Parse(input[0]);

            long output = 0;

            var snowmens = new Snowmen[n + 1];

            snowmens[0] = new Snowmen();
            for (int i = 1; i <= n; i++)
            {
                var     actionParts = input[i].Split(new[] { ' ' }).ToArray();
                var     ancestor    = int.Parse(actionParts[0]);
                var     action      = short.Parse(actionParts[1]);
                Snowmen newSnowman;
                if (action == 0)
                {
                    newSnowman = snowmens[ancestor].Ancestor != null ? snowmens[ancestor].Ancestor.Clone() : snowmens[ancestor].Clone();
                }
                else
                {
                    newSnowman = new Snowmen(snowmens[ancestor], action);
                }

                snowmens[i] = newSnowman;
            }

            output = snowmens.Sum(x => x.Mass);

            File.WriteAllText("output.txt", output.ToString("0"));

            //Console.WriteLine(output.ToString("0"));
            //Console.ReadLine();
        }
Exemple #2
0
        public void snowmenTest()
        {
            var s = new Snowmen();

            Assert.AreEqual(71.20943348136865, s.snowmen(new[] { 1, 1, 2, 2, 2, 3 }));
            Assert.AreEqual(71.20943348136865, s.snowmen(new[] { 2, 1, 2, 3, 1, 2 }));
            Assert.AreEqual(12.566370614359172, s.snowmen(new[] { 1, 1, 1 }));
            Assert.AreEqual(0, s.snowmen(new[] { 1, 1, 1, 2, 3, 4, 5, 6, 7 }));
            Assert.AreEqual(1813.7461586725074, s.snowmen(new[] { 1, 4, 6, 3, 6, 6 }));
            Assert.AreEqual(268.082573106329, s.snowmen(new[] { 5, 4, 4, 4, 5, 3, 3, 2, 4, 2 }));
            Assert.AreEqual(16.755160819145562, s.snowmen(new[] { 3, 1, 3, 1, 1, 1, 2, 1, 5, 2 }));
            Assert.AreEqual(12.566370614359172, s.snowmen(new[] { 1, 1, 1, 2, 3, 5 }));
            Assert.AreEqual(37.69911184307752, s.snowmen(new[] { 1, 15, 12, 17, 20, 20, 13, 2 }));
            Assert.AreEqual(343.480796792484, s.snowmen(new[] { 3, 3, 3, 2, 3, 4, 5, 3, 1, 5 }));
            Assert.AreEqual(113.09733552923255, s.snowmen(new[] { 7, 25, 20, 13, 3, 17, 21, 22, 23, 27 }));
        }
Exemple #3
0
 public Snowmen(Snowmen baseSnowman, short topBall)
 {
     _ancestor = baseSnowman;
     _mass     = _ancestor == null ? 0 : _ancestor.Mass + topBall;
 }