2021年中国大学生程序设计竞赛女生专场 A. 公交线路

题目链接:Problem - A - Codeforces

比特镇只有一条双向的公交线路,这条线路一共经过 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;
} 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值