分情况讨论

基于约束推导合法数组数量:

情况 1:m=1

要求数组中至少有 1 个不同数字(即所有合法的 “好数组” 都满足)。

  • 由于 a_1=0a_2 可以取 0,1,...,n(共 n+1 个值);
  • i≥2a_{i+1}a_i 唯一确定(满足 a_i = a_{i+1} mod i);
  • 因此合法数组数量为 n+1

情况 2:m=2

要求数组中至少有 2 个不同数字,需排除 “全 0 数组”(仅 1 个不同数字)。

  • 总合法数组数量(m=1)为 n+1,减去全 0 数组(1 个),得 n

情况 3:m=3

要求数组中至少有 3 个不同数字,仅存在 1 种合法数组:

  • 数组需满足 a_1=0a_2=1a_3=3a_4=7...(每个 a_{i+1}=i + a_i),且所有元素 ≤n;
  • 仅当 n≥3 时存在 1 个这样的数组,否则为 0。

情况 4:m>3

由于 “好数组” 的约束,最多只能有 3 个不同数字,因此无合法数组,数量为 0。

void solve()
{
    cin>>n>>m;
    if(m==1)
    {
        cout<<n+1<<endl;
    }
    else if(m==2)
    {
        cout<<n<<endl;
    }
    else if(m==3)
    {
        cout<<1<<endl;
    }
    else  {
        cout<<0<<endl;
    }
}