分情况讨论
基于约束推导合法数组数量:
情况 1:m=1
要求数组中至少有 1 个不同数字(即所有合法的 “好数组” 都满足)。
- 由于
a_1=0,a_2可以取0,1,...,n(共n+1个值); - 对
i≥2,a_{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=0,a_2=1,a_3=3,a_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;
}
}

京公网安备 11010502036488号