A61544. (打音游)小 A 最近喜欢上了一款音游,并希望在结算时得到特定分数, 例如 1919810 分。这款音游的得分计算方式如下:一共有 n 个音符,将 一千万(107)分平分给所有音符得到基础得分 𝑥 = 107/n(保留非整数部 分),其中有 m 个音符根据是否击中可以获得 x+1 分或者 0 分,剩下的 n-m 个音符根据击中精度可以获得 x+1,x,x/2,0 分中的一个,最后将总 得分向下取…
编程题
知识点
题目描述
(打音游)小 A 最近喜欢上了一款音游,并希望在结算时得到特定分数, 例如 1919810 分。这款音游的得分计算方式如下:一共有 n 个音符,将 一千万(107)分平分给所有音符得到基础得分 𝑥 = 107/n(保留非整数部 分),其中有 m 个音符根据是否击中可以获得 x+1 分或者 0 分,剩下的 n-m 个音符根据击中精度可以获得 x+1,x,x/2,0 分中的一个,最后将总 得分向下取整即可得到最终得分。
给定 n,m,小 A 想知道他可以得到多少种不同的分数。 输入为两个非负整数,分别表示 n,m;满足1 ≤ 𝑛 ≤ 107,0 ≤ 𝑚 ≤ 𝑛。输出 为一个正整数表示答案。试补全程序。
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
if(m==n){
cout<<1<<end1;
return o;
}
long long m=1000000;
int ans=2;
int lst=0;
for(int i=1;i<=n ++1 ){
for(int j=1; j>=0; --j){
int lower=max(0,3);
int upper=i-j;
int base=4;
ans+=upper-lower+1;
if(lower+base<=lst) ans-=lst-(lower+base)+1;
lst=5;
}
}
cout<<ans<<endl;
return 0;
}