比特镇只有一条双向的公交线路,这条线路一共经过 nn 个不同的站点,从头到尾依次编号为 1,2,…,n1,2,…,n,其中第 ii 个站点的名称包含 kiki 个汉字。由于是双向道路,你既可以从 11 号站点坐车前往 nn 号站点,也可以从 nn 号站点坐车前往 11 号站点,但是从 11 号站出发的车到达 nn 号站点之后不会折返,从 nn 号站出发的车到达 11 号站点之后也不会折返,必须要下车换乘。在行驶到两个站点中间时,公交会播报沿着行驶方向即将到达的站点名称。
小Q的公司位于 xx 号站点,小Q的家则位于 yy 号站点。现在小Q已经从 xx 号站点上车准备回家,但是车上实在太多人了,小Q上车之后并不能通过站牌看到现在到了哪一站,也听不清车上即将到站的播报,只能听到播报的站点名称包含多少个汉字。
因为粗心的小Q经常坐反公交,在车上播报了 mm 次即将到达的站点名称后,小Q想立即确认自己有没有坐反方向。如果真的坐反了,公交到站停靠后小Q就要立即下车换乘到反方向的车上。小Q非常确信如果自己坐对了方向是不会坐过站的,也就是说播报的站点数一定不大于 |x−y||x−y|。
Input
第一行包含三个正整数 n,x,yn,x,y (2≤n≤102≤n≤10, 1≤x,y≤n1≤x,y≤n, x≠yx≠y),依次表示站点的数量、公司所在的站点以及家所在的站点。
第二行包含 nn 个正整数 k1,k2,…,knk1,k2,…,kn (1≤ki≤91≤ki≤9),依次表示每个站点的字数。
第三行包含一个正整数 mm (1≤m≤|x−y|1≤m≤|x−y|),表示沿途经过的站点数。
第四行包含 mm 个正整数 p1,p2,…,pmp1,p2,…,pm (1≤pi≤91≤pi≤9),依次表示每次播报的字数,保证小Q听到的 mm 次即将到站的播报是合法的。
Output
如果通过 mm 次即将到站的播报能确定小Q一定没有坐反方向,请输出"Right"; 如果能确定小Q一定坐反方向了,请输出"Wrong"; 如果通过 mm 次即将到站的播报不能确定乘坐方向,也就是说小Q既可能坐对方向,也可能坐反方向,请输出"Unsure"。
Examples
input
Copy
7 4 6 3 2 3 4 5 4 3 2 5 4
output
Copy
Right
input
Copy
7 4 6 3 2 3 4 5 4 3 2 3 2
output
Copy
Wrong
input
Copy
7 4 6 3 3 3 3 3 3 3 2 3 3
output
Copy
Unsure
思路:分开讨论(x < y)和(x > y)的情况,然后每组考虑分开考虑正向和反向的情况,去比较两种情况符合的数量是否等于m,如果都相等就输出“Unsure”,然后只有正确的方向等于m的时候的输出“Right”,否则输出“Wrong”
#include<bits/stdc++.h>
using namespace std;
int arr[15];
int brr[15];
int main(){
int n, x, y;
int m;
cin >> n >> x >> y;
for(int i = 1; i <= n; i++){
cin >> arr[i];
}
cin >> m;
for(int i = 0; i < m; i++){
cin >> brr[i];
}
int ans = 0, cnt = 0;
if(x > y){
int a = x - 1;
int b = x + 1;
for(int i = 0; i < m; i++){
if(a > 0 && arr[a] == brr[i]){
ans++;
a--;
}
if(b <= n && arr[b] == brr[i]){
cnt++;
b++;
}
}
}else{
int a = x + 1;
int b = x - 1;
for(int i = 0; i < m; i++){
if(a <= n && arr[a] == brr[i]){
ans++;
a++;
}
if(b > 0 && arr[b] == brr[i]){
cnt ++;
b--;
}
}
}
if(ans == m && cnt == m){
cout << "Unsure" << endl;
}else if(ans == m){
cout << "Right" << endl;
}else if(ans != m){
cout << "Wrong" << endl;
}
return 0;
}