文章

29

粉丝

165

获赞

53

访问

35.1k

头像
差分计数 题解:输入数据量很大的时候,建议使用scanf
P1907 华东师范大学2022年机试
发布于2025年3月19日 16:37
阅读数 352

根据满分篇的内容

C++加速还是不如scanf速度快

#include <stdio.h>
#include <stdlib.h>

#define MAX_N 2000000
#define MAX_VAL 4000001
#define OFFSET 2000000

int main() {
    int n, x;
    int *a = (int *)malloc(MAX_N * sizeof(int));
    int *hash_table = (int *)calloc(MAX_VAL, sizeof(int));
    int count = 0;

    // 读取 n 和 x
    scanf("%d %d", &n, &x);

    // 读取 n 个整数并更新哈希表
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        hash_table[a[i] + OFFSET]++;
    }

    // 遍历数组,计算满足条件的有序对个数
    for (int i = 0; i < n; i++) {
        int target = a[i] - x + OFFSET;
        if (target >= 0 && target < MAX_VAL) {
            count += hash_table[target];
        }
    }

    // 输出满足条件的有序对个数
    printf("%d\n", count);

    // 释放内存
    free(a);
    free(hash_table);

    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发