AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

【牛客周赛 Round 58】E-好好好数组

作者: 作者的头像   逝滅 ,  2024-09-03 19:36:51 ,  所有人可见 ,  阅读 6


0


题目:对于数组 $\{a_1,a_2,\dots,a_n\}$ ,我们定义它是好的,当且仅当:对于全部的 $i \in [1,n)$ ,$a_i = a_{i+1} \bmod i$ 总是成立;

$\,\,\,\,\,\,\,\,\,$现在,你可以选择 $n$ 个整数组成一个数组,使得这个数组是好的;同时,你还需要保证:
              $\,\,\,\,\,\,\,\,\,\,\,\,\,\,\bullet\,$数组中至少存在 $m$ 个不同的数字;

$\,\,\,\,\,\,\,\,\,\,\,\,\,\,\bullet\,$数组中的每一个数字都满足 $\in [0,n]$ 。

$\,\,\,\,\,\,\,\,\,$在这里, $\bmod$ 代表取模。

输入:$\,\,\,\,\,\,\,\,\,$每个测试文件均包含多组测试数据。第一行输入一个整数 $T\left(1\le T\le 10^5\right)$ 代表数据组数,每组测试数据描述如下:

$\,\,\,\,\,\,\,\,\,$在一行上输入两个整数 $n,m \left( 1\le m \le n \le 10^7\right)$ 代表你需要挑选的数字数量、不相同数字个数的限制。
输出:         $\,\,\,\,\,\,\,\,\,$对于每一组测试数据,在一行上输出一个整数,代表满足条件的数组数量。

思路:模拟几遍之后发现m <= 3时才有符合条件的数组,并且:

当m = 3时:满足条件的只有第一个数是0,最后一个数是n,中间的数是1的情况

当m = 2时:满足条件的除了满足m = 3的情况外,还有n - 1种情况(例:n = 5,满足条件的数组有{0,1,1,1,1,}、{0,0,2,2,2}、{0,0,0,3,3}、{0,0,0,0,4}共4种情况

当m = 1时,满足条件的除了m = 3和m = 2的情况外,还有全为0的情况

#include <iostream>
using namespace std;

int main()
{
    int T;
    scanf("%d", &T);
    while (T -- )
    {
        int n, m;
        scanf("%d%d", &n, &m);

        if (m > 3)
        {
            printf("0\n");
            continue;
        }

        int ans = 0;
        if (m <= 3) ans ++;
        if (m <= 2) ans += n - 1;
        if (m <= 1) ans ++;

        cout << ans << endl;
    }

    return 0;
}

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息