前缀和练习1

感谢您能抽出几分钟时间来参加本次答题,现在我们就马上开始吧!
姓名
    ____________
完善程序1


【Suan 数区间统计】

蒜头君定义了一种数叫 suan 数:如果一个整数 x 是 suan 数,那么它必定能被给定的正整数 k 整除。现有 n 次询问,每次给出两个正整数 l, r(l <= r),请你统计区间 (l, r](即不包含左端点 l)中有多少个整数是 suan 数。数据范围:1 <= n, k, l, r <= 10^5,且 l <= r。


下面是一段用于解决该问题的不完整 C++ 代码。它使用前缀和数组 s[i] 表示前 i 个整数中 suan 数的个数,从而实现区间查询。请在标有 ①~⑤ 的位置填入正确的表达式或语句。


#include

using namespace std;


int n, k, s[①]; // 询问次数,k的倍数


int main(){


    cin >> n >> k;


    for(int i=②; i<=100000; i++) { // 前i个数中k的倍数的个数


        if(③) s[i]=s[i-1]+1;     // 如果第i个数是k的倍数,总数+1


        else s[i]=④; // 否则不变

    }


    while(n--) {

        int l,r;

        cin >> l >> r;

        cout << ⑤ << endl;

    }

    return 0;

}

①
A. 100005
B. 105
C.100000
D.100000005
②
A. 0
B. 1
C.2
D.3
③
A. i % k != 0
B. i % k 0
C.i % k == 0
D. i % k == 1
④
A. k
B. i
C. s[i]
D. s[i-1]
⑤
A. r - l + 1
B. r - l
C. s[r] - s[l - 1]
D. s[r] - s[l]
完善程序题2


【咖啡温度】

蒜头君想泡咖啡喝。现在他得到了 n 份菜谱,每个菜谱上都给了两个数 l, r,代表温度区间在 [l, r] 度泡出来的咖啡会很好喝。


可是菜谱太多了,蒜头君一度感到疑惑。经过思考之后他得出了一个结论:某个温度只要有 k 份或者更多菜谱推荐,那么这个温度下泡出来的咖啡会很好喝。


现在他给出了 m 个温度区间,同样还是用 [l, r] 表示,现在求问每个区间里面有多少个整数,使得咖啡在这个温度下泡出来会很好喝?


输入格式:


第一行为三个整数 n, k, m。


第 2 ~ n+1 行,每行两个整数,代表菜谱里面的 l, r。


第 n+2 ~ n+m+1 行,每行两个整数,代表询问温度区间里面的 l, r。


输入的所有数都是正整数且不超过 2×10^5,且满足 l ≤ r,k ≤ n,且所有区间的长度之和不超过 10^7。


输出格式:


对于每个询问输出一行,为一个整数,表示有多少可用的温度。

完形填空

const int MAXN = 200000;

int n, k, m;

int diff[MAXN + 5]; // 差分数组

int good[MAXN + 5]; // good[i]=1 表示温度i好喝

int pre[MAXN + 5]; // 好喝温度个数的前缀和


int main() {

    scanf("%d%d%d", &n, &k, &m);

    for (int i = 1; i <= n; i++) {

        int l, r;

        scanf("%d%d", &l, &r);

        // ① 差分更新

      
1
请选择
;

    }

    int cnt = 0;

    for (int i = 1; i <= MAXN; i++) {

        // ② 累加当前温度被推荐的次数

      
2
请选择
;

        if (

3
请选择
) { // ③ 判断是否好喝

            good[i] = 1;

        } else {

            good[i] = 0;

        }

        // ④ 计算前缀和

       

4
请选择
;

    }

    for (int i = 1; i <= m; i++) {

        int l, r;

        scanf("%d%d", &l, &r);

        // ⑤ 输出答案

        printf("%d\n",

5
请选择
);

    }

    return 0;

}

1. A. diff[l]++, diff[r]-- B. diff[l]++, diff[r+1]-- C. diff[l]--, diff[r+1]++ D. diff[l]++, diff[r+1]++
2. A. cnt += diff[i] B. cnt = diff[i] C. cnt = diff[i] + cnt D. cnt = diff[i]++
3. A. cnt > = k B. cnt > k C. cnt == k D. cnt < k
4. A. pre[i] = pre[i-1] + good[i] B. pre[i] = pre[i-1] + (cnt > = k) C. pre[i] = pre[i-1] + 1 D. pre[i] = good[i]
5. A. pre[r] - pre[l] B. pre[r] - pre[l-1] C. pre[r-1] - pre[l-1] D. pre[r] - pre[l+1]

9题 | 被引用0次

模板修改
使用此模板创建