题目大意:n个人互相pk,每个人都要和n-1个人pk,赢了得a分,平了得b分,输了得c分,给出一个m,让你求出排名第(m+1)个人得最高得分以及第m个人得最低得分;
解题思路:首先将n个人分为m,1,(n-m-1),然后要求出这个人得最高得分,首先按照我们正常的思维,如果a<c交换a和c,因为是最高的分,所以首先和后面的人要得ans=(n-m-1)max(b,a);然后和前面的人比可以全平或者赢一半输一半这样是得分最高的时候,另一个也是同样的道理
#include <iostream> #include <cstdio> using namespace std; typedef long long ll; int main() { int T; cin>>T; int cas=0; while(T--) { cas++; ll m,n; cin>>n>>m; ll a,b,c; cin>>a>>b>>c; if(a<c) swap(a,c); ll ans1,ans2; ans1=(n-m-1)*max(a,b); ans1+=max(m/2*b*2,m/2*a+m/2*c);//这里一定要将m/2之后再乘以2,以防止m是奇数然后还要加一个平局的分 if(m%2==1) ans1+=max(b,c); ans2=(m-1)*min(c,b); ans2+=min((n-m)/2*b*2,(n-m)/2*a+(n-m)/2*c); if((n-m)%2==1) ans2+=min(a,b); printf("Case #%d: %lld %lld\n",cas,ans1,ans2); } return 0; }