题解 | 好好好数组

好好好数组

https://www.nowcoder.com/practice/bacd2c7176e945ee88e7d83c6019613d

分情况讨论

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

情况 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;
    }
}

全部评论

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务