UVALive 7147 World Cup 2014 上海区域赛j题思维题

xiaoxiao2021-02-28  96

                                                          题 目 传 送 门

题意:世界杯上有一个小组有n支球队,m支可以晋级,赢 平 输 所得的分数分别是a b c

问你两个可能,一种是没晋级可能得到的最大分值  第二种是晋级了可能得到的最小分值

思路:

先讨论最高不晋级分数,我们考虑把N个人分成m,1,n-m-1个人,那么中间那个人的分数就是答案,那么中间这个人和后半部分的人的比赛结果一定是要么全赢,要么全平,ans+=(n-m-1)*max(a,b),而与前面的人比赛,既然需要最高不晋级分,那么就可能和前面的人赢输对半,或者全平,ans+=max(m/2*a+m/2*b,m/2*b+m/2*b),而当m是奇数的时候,则多一轮,显然这轮的结果只能是平或者输,不然的话就会超越前面的一个人了,最低晋级分数同理

ac代码: #include <iostream> #include <cstdio> using namespace std; int main() { int t; cin>>t; int p=0; while(t--) { long long n,m,a,b,c; cin>>n>>m; cin>>a>>b>>c; long long max1; max1=(n-m-1)*max(a,max(b,c)); if(m%2==0) { max1+=(max(m*b,m/2*(a+c))); } else { max1+=((max(m/2*2*b,m/2*(a+c)))+max(b,min(a,c))); } long long min1; min1=(m-1)*min(a,min(b,c)); if((n-m)%2==0) { min1+=min((n-m)*b,(n-m)/2*(a+c)); } else { min1+=(min((n-m)/2*2*b,(n-m)/2*(a+c))+min(b,max(a,c))); } printf("Case #%d: ",++p); cout<<max1<<" "<<min1<<endl; } return 0; }

转载请注明原文地址: https://www.6miu.com/read-72494.html

最新回复(0)