题目描述
一年一度的X星人田径运动会隆重开幕。小小X报名参加了跳跃比赛,这可是小小X最擅长的项目!跳跃比赛分为两轮,一轮是跳高,一轮是跳远。最终成绩将综合两轮比赛的成绩来确定,并且两轮比赛成绩在最终成绩的计算中各占一半权重。
现在已经知道小小X在跳高和跳远两轮比赛中分别的排名情况,现在请你编写一个程序帮小小X计算一下最终成绩排名中小小X可以获得的最好名次和最差名次。
输入描述
每组输入包含一个测试样例,每个测试样例包含3行。
第一行输入n,表示参赛人数(n<=26).
第二行输入n个不重复的大写字母,表示n个人按跳高成绩按最好到最差的排名。
第三行输入n个不重复的大写字母,表示n个人按跳远成绩从最好到最差的排名。
【每个字符对应一个参赛者,不存在排名相同的情况,其中X表示小小X,两个字符之间用空格隔开】
输出描述
输出一行,包含两个数分别为小小X在最终排名中的最好名次和最差名次,两个数之间用空格隔开。
样例
输入
10
A B C D E F X H I J
A C I X E F J H D B
输出
3 8
提示
样例解释
两项比赛中。A、C排名均在小小X前,故小小X的最终排名最好是前三名。
两项比赛中。J、H排名均在小小X前,故小小X的最终排名至少是第八名。
代码
#include<iostream>
using namespace std;
unsigned int n; // 参赛人数
char a[26]; //跳高
char b[26];//跳远
unsigned int x;//X在跳高中的排名
unsigned int y;//X在跳远中的排名
int c = 1;
int d = 0;
int main() {
cin >> n;
cout << endl;
if (n > 26)
return 0;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n; i++)
{
cin >> b[i];
}
for (int i = 1; i <= n; i++)
{
if (a[i] == 'X')
x = i;
}
for (int i = 1; i <= n; i++)
{
if (b[i] == 'X')
y = i;
}
for (int i = 1; i < x; i++)
{
for (int j = 1; j < y; j++)
{
if(a[i] == b[j])
c++;
}
}
for (int i = x+1; i <=n; i++)
{
for (int j = y+1; j <= n; j++)
{
if (a[i] == b[j])
d++;
}
}
cout << c << ' ' << n - d<< endl;
return 0;
}