(打音游)小 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; }
1处应填
-1
n-1
n
n+1
2处应填
-1
0
1
n
3处应填
i–(n-m)-1
i–(n-m)-j
i–(n-m)
i–(n-m)+j
4处应填
(2*i+j) * M / (2*n)
(2*i-j) * M / (2*n)
i * M / n +j * M / (2*n)
i * M / n -j * M / (2*n)
5处应填
base + upper
base + upper + 1
base + lower
base + lower + 1