A.スペースナビゲーション
テストあたりの時間制限テストあたり2秒のメモリ制限256メガバイト
入力標準入力
出力標準出力
あなたは、個人の宇宙船でPlanetforcesという名前の惑星に旅行していることを夢見ていました。残念ながら、そのパイロットシステムは破損しており、Planetforcesに到達するには修正する必要があります。
空間はXY平面として表すことができます。ポイント(0,0)から開始し、Planetforcesはポイント(px、py)にあります。
宇宙船の水先案内システムは、文字列sとして表すことができる注文のリストに従います。システムはsを左から右に読み取ります。ポイント(x、y)にいて、現在の順序がsiであるとします。
si = Uの場合、(x、y + 1);に移動します。
si = Dの場合、(x、y-1)に移動します。
si = Rの場合、(x + 1、y);に移動します。
si = Lの場合、(x-1、y)に移動します。
文字列が破損している可能性があるため、最終的にPlanetforcesに到達できない可能性があります。幸い、からいくつかの注文を削除することはできますが、それらの位置を変更することはできません。
システムがすべての注文を処理した後にPlanetforcesに到達するような方法で、sから複数の注文(場合によってはゼロ)を削除できますか?
翻訳:
あなたはあなたがあなたの個人的な宇宙船に沿って惑星の力と呼ばれる惑星に旅行していることを夢見ています。残念ながら、その誘導システムは損傷しており、惑星軍に到達するために修理する必要があります。空間はⅩY平面として表すことができます。点(0、0)から開始し、惑星の力は点(Px、Py)にあります。宇宙船のテストシステムは、文字列sとして表すことができるコマンドリストに従います。システムは次のようにsを読み取ります。左から右へ。(x、y)と現在の注文がSiであるあなたがポイントであると仮定する:
SI = U場合は、(X、Y + 1)に移動し、
SI = D場合は、(X、Y-1)に移動し、
場合si = R、(x-1、y)に
移動します。si= Lの場合、(x = 1、y)に移動します。
文字列sが損傷している可能性があり、惑星の力に到達しない可能性があります。最終的には。幸い、Sから一部の文字を削除することはできますが、位置を変更することはできません。システムがすべての注文を処理した後、Sからいくつかのコマンドを削除できますか(可能な限り0から開始)、惑星の力に到達しますか?
入力
最初の行には、単一の整数t(1≤t≤1000)—テストケースの数が含まれています。
各テストケースは2行で構成されています。各テストケースの最初の行は、二つの整数PXとPY(-10含ま5 ≤px、py≤10 5 Planetforcesの座標(PX、PY) - ;(PX、PY)≠(0,0))。
二行目は文字列s含まれています(|よ|1≤を≤10 5:| S |文字列sの長さ) -注文のリスト。
| s |の合計が保証されます すべてのテストケースの上に10超えない5。
翻訳:
最初の行には、テストケースの数である単一の整数t(1≤t≤1000)が含まれています。
各テストケースは2行で構成されています。各テストケースの最初の行は、二つの整数PXとPyを(-10含ま5 ≤Px、Py≤10 5 =遊星力の座標(Pxを、Pyを);(Pxと、Pyのを)≠(0,0))。
2行目には、文字列s(1≤| s |≤105:| s |は文字列sの長さ)(順序のリスト)が含まれています。
それを確認してください| | S 10超えない5すべてのテストケースでは。
出力
Planetforcesに到達するような方法で、sから複数の注文(場合によってはゼロ)を削除できる場合は、テストケースごとに「YES」と出力します。それ以外の場合は、「NO」と出力します。どのような場合でも(上または下)、各文字を印刷できます。
例
inputCopy
6
10 5
RRRRRRRRRRUUUUU
1 1
UDDDRLLL
-3 -5
LDLDLDDDR
1 2
LLLLUU
3 -2
RDULRLLDR
-1 6
RUDURUUUUR
outputCopy
YES
YES
YES
NO
YES
NO
注
最初のケースでは、sを変更する必要はありません。これは、指定されたsがPlanetforcesに移動するためです。
2番目のケースでは、注文s2、s3、s4、s6、s7、およびs8を削除できるため、sは「UR」と等しくなります。
3番目のテストケースでは、注文s9を削除する必要があります。そうしないと、Planetforcesの位置で終了しません。
問題解決のアイデア:
構造体の位置を使用して座標を記録します。
指定されたキー座標に従って、入力文字を1つずつトラバースします(つまり、いわゆる歩行方向)
。xがPxに達すると、次のLとRは無視されます。
yがPyに達したら、次のD、Uを無視します。
参照コード:
#include<iostream>
using namespace std;
struct position{
int x,y;
};
int main(void)
{
position p,m;
int t;
cin>>t;
char q;
for(int i=0;i<t;i++){
cin>>p.x>>p.y;
m.x=m.y=0;
getchar();
q='q';
while(q!='\n'){
scanf("%c",&q);
if(q=='\n' )
break;
if((m.x==p.x && (q=='R'||q=='L')) || (p.x>0&&q=='L') || (p.x<0&&q=='R')){
continue;
}
if((m.y==p.y && (q=='U'||q=='D')) || (p.y>0&&q=='D') ||(p.y<0&&q=='U')){
continue;
}
switch(q){
case 'U':m.y++;break;
case 'D':m.y--;break;
case 'R':m.x++;break;
case 'L':m.x--;break;
}
}
if(m.x==p.x && m.y==p.y)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
わからない場合は、中断してください。
学んだ場合は、いいねを残して、お互いに励ましてください。!!