https://cn.vjudge.net/contest/164409#problem/L
就是田忌赛马那个题。
给定两队,他们的等级,等级高的肯定赢,问你你们他们谁能赢。进行两次 田忌赛马。。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn=200006;
int main()
{ int t;
int a[maxn];
int b[maxn];
scanf("%d",&t);
for(int i=0;i<t;i++)
scanf("%d",&a[i]);
for(int i=0;i<t;i++)
scanf("%d",&b[i]);
sort(a,a+t);
sort(b,b+t);
bool flag1=false;
bool flag2=false;
int max1=t-1;
int max2=t-1;
int min1=0;
int min2=0;
int win1=0;
while(min1<=max1&&min2<=max2)
{ if(a[max1]>b[max2])
{ win1++;
max1--;
max2--;
}
else if(a[max1]<b[max2])
{ win1--;
min1++;
max2--;
}
else
{ if(a[min1]>b[min2])
{ win1++;
min1++;
min2++;
}
else if(a[min1]<b[max2])
{ win1--;
min1++;
max2--;
}
}
}
if(win1>0)
flag1=true;
max1=t-1;
max2=t-1;
min1=0;
min2=0;
// printf("%d\n",win1);
win1=0;
while(min1<=max1&&min2<=max2)
{ if(b[max1]>a[max2])
{ //cout<<max1<<" "<<max2<<endl;
win1++;
max1--;
max2--;
}
else if(b[max1]<a[max2])
{ //cout<<max1<<" "<<max2<<endl;
win1--;
min1++;
max2--;
}
else
{ if(b[min1]>a[min2])
{ //cout<<min1<<" "<<min2<<endl;
win1++;
min1++;
min2++;
}
else if(b[min1]<a[max2])
{ //cout<<min1<<" "<<max2<<endl;
win1--;
min1++;
max2--;
}
}
}
if(win1>0)
{ //cout<<win1<<endl;
flag2=true;}
if(flag1&&flag2)
puts("Both");
else if(flag1&&!flag2)
puts("First");
else if(!flag1&&flag2)
puts("Second");
else
puts("None");
return 0;
}