题意:一个音游,分数由point * (combo*2+1)计算,假设玩家很强,combo是一直连续的。求最低分和最高分。point分成50,100,300三种。
题记:combo是从0开始的,最低分的话让300的先计算,50的最后计算,最高分则反之。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
int t;
cin>>t;
while(t--){
int a,b,c,d;
cin>>a>>b>>c;
d=a+b+c;
int aa=a,bb=b,cc=c;
ll mmax=0,mmin=0;
for(int i=0;i<d;i++){
if(aa){
mmin+=300*(i*2+1);
aa--;
}
else if(bb){
mmin+=100*(i*2+1);
bb--;
}
else{
mmin+=50*(i*2+1);
cc--;
}
}
for(int i=0;i<d;i++){
if(c){
mmax+=50*(i*2+1);
c--;
}
else if(b){
mmax+=100*(i*2+1);
b--;
}
else{
mmax+=300*(i*2+1);
a--;
}
}
cout<<mmin<<' '<<mmax<<endl;
}
return 0;
}