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
AC × 21
WA × 5
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