티스토리 뷰
구글 코드잼 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