CF2029A.Set

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Set

题目描述

给定一个正整数 kk 和一个集合 SSSS 包含所有从 llrr(包含两端)之间的整数。

你可以进行如下的两步操作任意次(可以为零次):

  1. 首先,从集合 SS 中选择一个数 xx,要求在 SS 中至少有 kkxx 的倍数(包括 xx 本身);
  2. 然后,将 xxSS 中移除(注意,其他元素不变)。

请你求出最多可以进行多少次这样的操作。

输入格式

每组测试数据包含多组测试用例。输入的第一行包含一个整数 tt1t1041\le t\le 10^4),表示测试用例的数量。接下来每组测试用例一行,包含三个整数 llrrkk1lr1091\le l\le r\leq 10^91krl+11\leq k\le r-l+1),分别表示集合 SS 的最小值、最大值和参数 kk

输出格式

对于每组测试用例,输出一个整数,表示最多可以进行多少次操作。

说明/提示

在第一个测试用例中,初始时 S={3,4,5,6,7,8,9}S = \{3,4,5,6,7,8,9\}。一种可能的最优操作序列如下:

  1. 第一次选择 x=4x=4,因为 SS 中有两个 44 的倍数:4488SS 变为 {3,5,6,7,8,9}\{3,5,6,7,8,9\}
  2. 第二次选择 x=3x=3,因为 SS 中有三个 33 的倍数:336699SS 变为 {5,6,7,8,9}\{5,6,7,8,9\}

在第二个测试用例中,初始时 S={4,5,6,7,8,9}S=\{4,5,6,7,8,9\}。一种可能的最优操作序列如下:

  1. 选择 x=5x=5SS 变为 {4,6,7,8,9}\{4,6,7,8,9\}
  2. 选择 x=6x=6SS 变为 {4,7,8,9}\{4,7,8,9\}
  3. 选择 x=4x=4SS 变为 {7,8,9}\{7,8,9\}
  4. 选择 x=8x=8SS 变为 {7,9}\{7,9\}
  5. 选择 x=7x=7SS 变为 {9}\{9\}
  6. 选择 x=9x=9SS 变为 {}\{\}

在第三个测试用例中,初始时 S={7,8,9}S=\{7,8,9\}。对于 SS 中的每个 xx,除了 xx 本身外,SS 中都找不到 xx 的倍数。因为 k=2k=2,所以无法进行任何操作。

在第四个测试用例中,初始时 S={2,3,4,5,6,7,8,9,10}S=\{2,3,4,5,6,7,8,9,10\}。一种可能的最优操作序列如下:

  1. 选择 x=2x=2SS 变为 {3,4,5,6,7,8,9,10}\{3,4,5,6,7,8,9,10\}
  2. 选择 x=4x=4SS 变为 {3,5,6,7,8,9,10}\{3,5,6,7,8,9,10\}
  3. 选择 x=3x=3SS 变为 {5,6,7,8,9,10}\{5,6,7,8,9,10\}
  4. 选择 x=5x=5SS 变为 {6,7,8,9,10}\{6,7,8,9,10\}

由 ChatGPT 4.1 翻译

样例

8
3 9 2
4 9 1
7 9 2
2 10 2
154 220 2
147 294 2
998 24435 3
1 1000000000 2
2
6
0
4
0
1
7148
500000000

在线编程 IDE

建议全屏模式获得最佳体验