2297 . 综合题

小 A 最近喜欢上了一款音游,并希望在结算时得到特定分数 【SCP 2021 第一轮(初赛)模拟】

例如 1919810 分。这款音游的得分计算方式如下:一共有 $n$ 个音符,将一千万($10^7$)分平分给所有音符得到基础得分 $x=\dfrac{10^7}{n}$(保留非整数部分),其中有 $m$ 个音符根据是否击中可以获得 $x+1$ 分或者 $0$ 分,剩下的 $n-m$ 个音符根据击中精度可以获得 $x+1$,$x$,$\dfrac{x}{2}$,$0$ 分中的一个,最后将总得分向下取整即可得到最终得分。

给定 $n,m$,小 A 想知道他可以得到多少种不同的分数。

输入为两个非负整数,分别表示 $n,m$;满足,$1 \leq n \leq 10^7,0 \leq m \leq n$。输出为一个正整数表示答案。试补全程序。

#include <iostream>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    if(m==n) {
        cout << ① << endl;
        return 0;
    }
    long long M=10000000;
    int ans=②;
    int lst=0;
    for(int i=1;i<=n;++i) {
        for(int j=1;j>=0;--j) {
            int lower=max(0,③);
            int upper=i-j;
            int base=④;
            ans+=upper-lower+1;
            if(lower+base<=lst) ans-=lst-(lower+base)+1;
            lst=⑤;
        }
    }
    cout << ans <<  endl;
    return 0;
}
1 . (单选题)

① 处应填( )

2 . (单选题)

② 处应填( )

3 . (单选题)

③ 处应填( )

4 . (单选题)

④ 处应填( )

5 . (单选题)

⑤ 处应填( )