結果

問題 No.48 ロボットの操縦
ユーザー velfare_nagata
提出日時 2016-10-04 10:15:04
言語 C#(csc)
(csc 3.9.0)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 3,354 bytes
コンパイル時間 1,215 ms
コンパイル使用メモリ 115,952 KB
実行使用メモリ 26,108 KB
最終ジャッジ日時 2024-11-21 15:33:47
合計ジャッジ時間 9,231 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 24 TLE * 1
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
プレゼンテーションモードにする

using System;
using System.Diagnostics;
namespace CodeIq
{
internal class Program
{
/// <summary>
///
///
/// (0,0)
/// (X,Y)
///
/// 1
/// 90∘ ()
/// 90∘ ()
/// KK(1≤K≤L)
/// </summary>
private static void Main()
{
//
var line1 = Console.ReadLine();
var line2 = Console.ReadLine();
var line3 = Console.ReadLine();
//var line1 = "0";
//var line2 = "-1";
//var line3 = "1000000000";
if( string.IsNullOrEmpty( line1 ) )
return;
if( string.IsNullOrEmpty( line2 ) )
return;
if( string.IsNullOrEmpty( line3 ) )
return;
var x = int.Parse( line1 );
var y = int.Parse( line2 );
var l = int.Parse( line3 );
var nowX = 0;
var nowY = 0;
var nowDir = Direction.North;
var orderCount = 0;
var getRedirectCount = new Func<Direction, Direction, int>( ( dir, nextDir ) =>
{
if( dir == nextDir )
return 0;
else if( ( (int)dir % 2 == 0 ) != ( (int)nextDir % 2 == 0 ) )
return 1;
else
return 2;
} );
var getMoveCount = new Func<int, int, int>( ( pos, nextPos ) =>
{
var addValue = ( pos < nextPos ) ? 1 : -1;
var moveCount = 0;
while( pos != nextPos )
{
moveCount++;
if( Math.Abs( nextPos - pos ) > l )
pos += addValue * l;
else
pos = nextPos;
}
return moveCount;
} );
//
// ①↑  ③↓
var nextDirections = new Direction[3];
nextDirections[0] = Direction.North;
nextDirections[1] = ( nowX < x ) ? Direction.West : Direction.East;
nextDirections[2] = Direction.South;
foreach( var nextDir in nextDirections )
{
var isX = ( (int)nextDir % 2 == 0 );
var isPositive = ( nextDir > 0 );
var nowPos = isX ? nowX : nowY;
var nextPos = isX ? x : y;
//
if( nowPos == nextPos )
continue;
//
if( isPositive && nowPos > nextPos )
continue;
if( !isPositive && nowPos < nextPos )
continue;
orderCount += getRedirectCount( nowDir, nextDir );
nowDir = nextDir;
orderCount += getMoveCount( nowPos, nextPos );
if( isX )
nowX = x;
else
nowY = y;
}
Debug.Print( orderCount.ToString() );
Console.WriteLine( orderCount );
}
/// <summary>
/// <br />
/// YX<br />
///
/// </summary>
public enum Direction
{
North = 1,
West = 2,
South = -1,
East = -2
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0