結果
| 問題 |
No.48 ロボットの操縦
|
| コンテスト | |
| ユーザー |
Pictogram1010
|
| 提出日時 | 2016-07-14 11:55:25 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1,136 ms / 5,000 ms |
| コード長 | 2,071 bytes |
| コンパイル時間 | 403 ms |
| コンパイル使用メモリ | 55,752 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-21 18:44:15 |
| 合計ジャッジ時間 | 2,336 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
ソースコード
#include<iostream>
using namespace std;
/*制御クラス*/
class Control{
int myX, myY; //自分の座標(myX, myY)
int disX, disY; //目的地の座標(disX, disY)
int L; //1回の最大移動可能距離
int Act; //行動回数
public:
//コンストラクタ兼デフォルトコンストラクタ
Control(int XX = 0, int YY = 0, int LL = 0)
:myX(0), myY(0), disX(XX), disY(YY), L(LL), Act(0){}
//行動回数の取得
int getAct(){ return Act; }
/*回転処理--------*/
//右に90度回転
void TurnRight(){
Act++;
}
//左に90度回転
void TurnLeft(){
Act++;
}
/*----------------*/
/*移動処理------------------*/
//+X方向へ移動
void MovePlusX()
{
while (myX < disX){
myX += L;
Act++;
}
}
//-X方向へ移動
void MoveMinusX()
{
while (myX > disX){
myX -= L;
Act++;
}
}
//+Y方向へ移動
void MovePlusY()
{
while (myY < disY){
myY += L;
Act++;
}
}
//-Y方向へ移動
void MoveMinusY()
{
while (myY > disY){
myY -= L;
Act++;
}
}
/*--------------------------*/
};
int main()
{
long int X, Y, L;
cin >> X >> Y >> L;
Control Robot(X, Y, L);
//Y座標が+なら
if (Y >= 0){
//Y座標まで移動
Robot.MovePlusY();
//X座標が+なら
if (X > 0){
//方向転換してX座標まで移動
Robot.TurnRight();
Robot.MovePlusX();
}
//X座標が-なら
else if (X < 0){
//方向転換してX座標まで移動
Robot.TurnLeft();
Robot.MoveMinusX();
}
}
//Y座標が-なら
else if (Y < 0){
//X座標が+なら
if (X > 0){
//方向転換してX座標まで移動
Robot.TurnRight();
Robot.MovePlusX();
Robot.TurnRight();
}
//X座標が-なら
else if (X < 0){
//方向転換してX座標まで移動
Robot.TurnLeft();
Robot.MoveMinusX();
Robot.TurnLeft();
}
//X座標が0なら
else{
//方向転換して何もしない
Robot.TurnRight();
Robot.TurnRight();
}
//Y座標まで移動
Robot.MoveMinusY();
}
//結果表示
cout << Robot.getAct() << endl;
}
Pictogram1010