题解:P11495 [ROIR 2019 Day 1] 两次测量
Heart_of_Iron · · 题解
思路
题目要求找到满足
- 对于每个可能的
i ,我们需要找到符合条件的j ,使得j - i 是a 的倍数,即:j = i + k \cdot a$$ 其中 $$k \geq 1 $$ 且 $$ i + k \cdot a \leq r - 这意味着对于每个
i ,我们要找到满足以下条件的k :i + k \cdot a \leq r$$ 即 $$k \leq \frac{r - i}{a} - 这样对于每个
i ,我们可以直接计算符合条件的k 的个数。每个i 对应的j 的个数是:\left\lfloor \frac{r - i}{a} \right\rfloor 这表示对于每个
i ,有多少个符合条件的j 。 - 最终我们只需要对每个
i 从l 到r-1 ,计算对应的j 的数量并累加即可。code
#include<bits/stdc++.h> using namespace std; #define int unsigned long long//宏定义好习惯 signed main() { int l, r, a; cin >> l >> r >> a; int cnt=0;//cnt for (int i = l; i < r; ++i) cnt += (r - i) / a; // 这是通过 (r - i) / a 来计算符合条件的 k 的个数 cout << cnt;//输出 return 0; }
60 分。