直接排个序然后田忌赛马……
#include"stdio.h"
#include"iostream"
#include"algorithm"
#include"stdlib.h"
using namespace std;
const int N=100005;
int a[N],b[N],n;
inline bool cmp(const int &a,const int &b){return a>b;}
int work(int *t,int *q){
int tl=1,tr=n,ql=1,qr=n,ans=0;
while(tl<=tr){
if(t[tl]>q[ql]) ans+=2,tl++,ql++;
else if(t[tr]>q[qr]) ans+=2,tr--,qr--;
else { if(t[tr]==q[ql]) ans++;
tr--,ql++; }
}
return ans;
}
int main(){
cin>>n; int i,j;
for (i=1;i<=n;i++) scanf("%d",a+i);
for (i=1;i<=n;i++) scanf("%d",b+i);
sort(a+1,a+n+1,cmp); sort(b+1,b+n+1,cmp);
printf("%d %d\n",work(a,b),2*n-work(b,a));
return 0;
}
本文介绍了一种基于田忌赛马策略的算法实现方法,通过排序和对比两个数组来模拟比赛过程,最终得出最优匹配策略及得分。该算法使用 C++ 实现,并详细展示了从输入到输出的完整流程。
284

被折叠的 条评论
为什么被折叠?



