Submission #6107
Source Code Expand
using System;
using System.Linq;
using System.Collections.Generic;
using Num = System.Double;
static class Ex {
public static IEnumerable<string> ReadLines(this System.IO.TextReader r) {
string s;
while(null != (s = r.ReadLine())) yield return s;
}
public static IEnumerable<TRes> Zip<T1, T2, TRes>(
this IEnumerable<T1> e1, IEnumerable<T2> e2, Func<T1, T2, TRes> fun)
{
using(var em = e1.GetEnumerator()) {
foreach(var x in e2) {
if(!em.MoveNext()) break;
yield return fun(em.Current, x);
}
}
}
}
class Q001D {
class Pair<T1, T2> {
public readonly T1 Item1;
public readonly T2 Item2;
public Pair(T1 i1, T2 i2) { Item1=i1; Item2=i2; }
public static Pair<T1, T2> New(T1 i1, T2 i2){
return new Pair<T1, T2>(i1, i2);
}
}
class Pos : Pair<Num, Num>{
public Num X {get {return Item1;}}
public Num Y {get {return Item2;}}
public Pos(Num x, Num y) : base(x, y) { }
}
class Acc {
public List<Pos> Path {get; private set;}
public Pos Pos {get {return Path.Last();}}
public Num Xn {get; private set;}
public Num Dx {get; set;}
public Acc() { Path = new List<Pos>();}
public Acc Update(Num x, Num y, Num dx) {
Path.Add(new Pos(x, y));
Dx = dx;
return this;
}
}
public static void Main(string[] args) {
Func<string, Num> toNum = Num.Parse;
Func<string, IEnumerable<Num>> toNums = s => s.Split(' ').Select(toNum);
Func<Num, Num> pow2 = n => n * n;
var cin = Console.In;
var N = toNum(cin.ReadLine());
var x0xn = toNums(cin.ReadLine());
var x0 = x0xn.First();
var xn = x0xn.Last();
var path = cin.ReadLines().Skip(1).Select(toNums)
.Zip(Enumerable.Range(1, (int)N-1), Pair<IEnumerable<Num>, int>.New)
.Aggregate(new Acc().Update(x0, 0, x0-xn), (acc, xlxry) => {
var y = xlxry.Item2;
var adx = acc.Dx * ((N + 1 - y + acc.Pos.Y) / (N + 1));
var xlxr = xlxry.Item1;
var xl = xlxr.First();
var dxl = xl - xn;
if(dxl > adx) return acc.Update(xl, y, dxl);
var xr = xlxr.Last();
var dxr = xr - xn;
if(dxr < adx) return acc.Update(xr, y, dxr);
return acc;
})
.Path.Concat(new Pos[]{new Pos(xn, N)});
var ans = path.Zip(
path.Skip(1),
(p1, p2) => Math.Sqrt(pow2(p1.X - p2.X) + pow2(p1.Y - p2.Y)))
.Sum();
Console.WriteLine("{0:F14}", ans);
}
}
Submission Info
| Submission Time |
|
| Task |
D - レースゲーム |
| User |
mnzk |
| Language |
C# (Mono 2.10.8.1) |
| Score |
0 |
| Code Size |
2580 Byte |
| Status |
WA |
| Exec Time |
753 ms |
| Memory |
15372 KiB |
Judge Result
| Set Name |
all |
| Score / Max Score |
0 / 100 |
| Status |
|
| Set Name |
Test Cases |
| all |
00_sample1.txt, 00_sample2.txt, 01_rnd_large_00.txt, 01_rnd_large_01.txt, 01_rnd_large_02.txt, 01_rnd_small_00.txt, 01_rnd_small_01.txt, 01_rnd_small_02.txt, 02_narrowrnd_large_00.txt, 02_narrowrnd_large_01.txt, 02_narrowrnd_small_00.txt, 02_narrowrnd_small_01.txt, 03_zigzag_large_00.txt, 03_zigzag_small_00.txt, 04_middle_large_00.txt, 04_middle_large_01.txt, 04_middle_large_02.txt, 04_middle_small_00.txt, 04_middle_small_01.txt, 04_middle_small_02.txt, 05_turnleft_large_00.txt, 05_turnleft_small_00.txt, 06_turnright_large_00.txt, 06_turnright_small_00.txt, 07_free_large_00.txt, 07_free_small_00.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample1.txt |
AC |
72 ms |
244 KiB |
| 00_sample2.txt |
AC |
78 ms |
2852 KiB |
| 01_rnd_large_00.txt |
AC |
753 ms |
10096 KiB |
| 01_rnd_large_01.txt |
AC |
726 ms |
7640 KiB |
| 01_rnd_large_02.txt |
AC |
734 ms |
7616 KiB |
| 01_rnd_small_00.txt |
AC |
81 ms |
608 KiB |
| 01_rnd_small_01.txt |
AC |
79 ms |
600 KiB |
| 01_rnd_small_02.txt |
WA |
79 ms |
596 KiB |
| 02_narrowrnd_large_00.txt |
AC |
693 ms |
12864 KiB |
| 02_narrowrnd_large_01.txt |
AC |
705 ms |
15364 KiB |
| 02_narrowrnd_small_00.txt |
AC |
76 ms |
484 KiB |
| 02_narrowrnd_small_01.txt |
AC |
81 ms |
3068 KiB |
| 03_zigzag_large_00.txt |
AC |
683 ms |
15372 KiB |
| 03_zigzag_small_00.txt |
AC |
79 ms |
3052 KiB |
| 04_middle_large_00.txt |
AC |
717 ms |
14604 KiB |
| 04_middle_large_01.txt |
AC |
711 ms |
13696 KiB |
| 04_middle_large_02.txt |
AC |
717 ms |
10076 KiB |
| 04_middle_small_00.txt |
AC |
81 ms |
3084 KiB |
| 04_middle_small_01.txt |
AC |
76 ms |
664 KiB |
| 04_middle_small_02.txt |
WA |
78 ms |
568 KiB |
| 05_turnleft_large_00.txt |
WA |
721 ms |
15244 KiB |
| 05_turnleft_small_00.txt |
WA |
76 ms |
3064 KiB |
| 06_turnright_large_00.txt |
WA |
724 ms |
13940 KiB |
| 06_turnright_small_00.txt |
AC |
81 ms |
3084 KiB |
| 07_free_large_00.txt |
AC |
707 ms |
2948 KiB |
| 07_free_small_00.txt |
AC |
82 ms |
3068 KiB |