티스토리 뷰

알고리즘 연습

알고리즘 4일차

newpolaris 2014. 4. 15. 10:33

구글 코드잼 Qualification round에 참전.

 

짜긴 짰는데 우선 round 끝나고 c++ 코드에 비해 한참 긴 내 코드를 보니 슬퍼진다.

 

찾아보니 죄다 c++이네, c# 코드를 겨우 몇개 찾아서 내 코드를 고치는 중.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace B
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo() { NumberDecimalSeparator = "."};
            int t;
            string[] lines = System.IO.File.ReadAllLines("input.txt");
            t = Convert.ToInt32(lines[0]);
            string[] answers = new string[t];
            Parallel.For(0, t, (num) =>
            {
                string[] parts = lines[num + 1].Split(' ');
                double c = Convert.ToDouble(parts[0], provider);
                double f = Convert.ToDouble(parts[1], provider);
                double x = Convert.ToDouble(parts[2], provider);

                double rate = 2;
                double best = double.PositiveInfinity;
                double cur = 0;
                for (int i = 0; i < x; ++i)
                {
                    best = Math.Min(best, cur + x / rate);
                    cur += c / rate;
                    rate += f;
                }
                answers[num] = string.Format("Case #{0}: {1}", num + 1, best.ToString(provider));
            });
            System.IO.File.WriteAllLines("output.txt", answers);
        }
    }
}

 

vs

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace B
{
    class Program
    {
        static double I = 2.0; // income in sec.

        static double problem(double C, double F, double X)
        {
            int numFac = 0;

            // i팩토리 수준에서 총 걸리는 시간.
            double requiredTimePast = double.MaxValue;

            // 현재 팩토리 수준까지 걸린 시간
            double elapedTime = 0;

            // 초기 생산 속도.
            double currRate = I;

            while (true)
            {
                // 현재 공장 수에서 목표까지 걸리는 시간 계산.
                double needToComplete = X / currRate;
                double requiredTimeCurr = needToComplete + elapedTime;
                double needToBuildFactory = C / currRate;

                if (requiredTimePast < requiredTimeCurr)
                    return requiredTimePast;

                elapedTime += needToBuildFactory;
                currRate += F;
                numFac++;
                requiredTimePast = requiredTimeCurr;
            }
        }

        static void Main(string[] args)
        {
            string inputFile = args[0];

            var output = new List<double>();

            using (TextReader reader = File.OpenText(inputFile))
            {
                int numTest = int.Parse(reader.ReadLine());

                for (int i = 0; i < numTest; i++)
                {
                    double[] nums = reader.ReadLine().Split(' ').Select(double.Parse).ToArray();
                    double C = nums[0];
                    double F = nums[1];
                    double X = nums[2];

                    output.Add(problem(C, F, X));
                }
            }

            string outputFile = Path.ChangeExtension(inputFile, "out");

            using (TextWriter writer = File.CreateText(outputFile))
            {
                for (int i = 0; i < output.Count; i++)
                {
                    writer.Write("Case #{0}: ", (i+1));
                    writer.WriteLine("{0:F7}", output[i]);
                }
            }
        }
    }
}

 

 

2배 가량이네.. 우선 이거 하고 c++ 실력도 기를 겸 1,2, 였나? 소스를 봐야겠다.

 

우선 Qalification round라서 rank랑 실력이랑 비교하는건 아닌 듯.

 

일부로 합격점만 받은 사람도 보이고.

 

'알고리즘 연습' 카테고리의 다른 글

알고리즘 연습 5일차  (0) 2014.05.01
알고리즘 연습 5일차..  (0) 2014.04.27
알고리즘 3일차 - 진도는 느리고  (0) 2014.04.05
2일차 연습.  (0) 2014.04.04
구글 코드 잼 준비 1일차.  (0) 2014.04.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크