t2018gc343赛马
时限:1s 空间:256m
第三题 赛马(horse)
问题描述:
赛马是一项古老的运行,我们都听说过“田忌赛马”的故事。现在有甲、乙两队各出n(编号为1..n)匹赛马进行一对一的n场比赛,由于赛马的出场顺序是赛前安排且不让对方知道的,所以两队只能决定自己马匹的上场顺序而不能根据对方的顺序来调整自己的策略。假设每匹马都有恒定的速度,所以速度大的马一定比速度小的马先到终点(没有意外!!),速度相等的马算同时到达终点(平局)。现给出两队赛马的速度及出场顺序,试计算出甲队胜、平、负的场次数。
输入格式:
第1行:一个整数n(0 < n < = 20000)。
第2行:n个整数,表示编号从1..n的甲队各匹马的速度(0 < 每个整数 < 1000)。
第3行:n个整数,表示编号从1..n的乙队各匹马的速度(0 < 每个整数 < 1000)。
第4行:n个整数,表示甲队马匹的出场顺序(0 < 每个整数 <= n)。
第5行:n个整数,表示乙队马匹的出场顺序(0 < 每个整数 <= n)。
输出格式:
一行:空格隔开的3个整数,分别表示甲队胜、平、负的场数。
输入样例:
5
1 3 8 2 2
2 4 8 3 2
1 3 2 4 5
3 2 1 4 5
输出样例:
2 1 2
#include<bits/stdc++.h>
using namespace std;
long long n,a[20002],b[20002],x[20002],y[20002];
long long lose=0,win=0,pj=0;
int main()
{
cin>>n;
for(long long i=1; i<=n; i++)scanf("%lld",&a[i]);
for(long long i=1; i<=n; i++)scanf("%lld",&b[i]);
for(long long i=1; i<=n; i++)scanf("%lld",&x[i]);
for(long long i=1; i<=n; i++)scanf("%lld",&y[i]);
for(long long i=1; i<=n; i++)
{
if(a[x[i]]>b[y[i]]) win++;
else if(a[x[i]]==b[y[i]]) pj++;
else if(a[x[i]]<b[y[i]]) lose++;
}
cout<<win<<" "<<pj<<" "<<lose;
return 0;
}