2025-10-03 HETAO CSP-S复赛集训营模拟赛-002 总结 Ⅱ

B.rmtcg

原题链接:rmtcg - 核桃OJ

代码这不就来了吗?

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N = 300005, V = 1000005, pi = 79498 + 5; //N是输入的空间大小,V是值域,pi是1~1e6的质数个数
unsigned bit_width(unsigned x){
    return x == 0 ? 0 : floor(log2(x)) + 1;
}
int n, m, a[N], st[21][N];
vector<int> d[V];
vector<int> pos[pi];
vector<int> primes;
vector<int> id;
int l, r, k;
int main(){
    freopen("rmtcg.in", "r", stdin);
    freopen("rmtcg.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i = 0; i < n; i++){
        cin >> a[i];
    }
    int o = bit_width(n); //获取n的二进制位数
    for (int i = 0; i < n; i++){
        st[0][i] = a[i];
    }
    for (int i = 1; i < o; i++){
        for (int j = 0; j + (1 << i) <= n; j++){
            st[i][j] = __gcd(st[i - 1][j], st[i - 1][j + (1 << (i - 1))]);
        }
    }
    auto rangegcd = [&](int l, int r){ //获得区间的gcd
        int L = bit_width(unsigned(r - l + 1)) - 1;
        return __gcd(st[L][l], st[L][r - (1 << L) + 1]);
    };
    // 修改开始:添加了id向量的初始化
    id.resize(V); // 添加这一行来初始化id向量的大小
    for (int i = 2; i < V; i++){
        if (d[i].empty()){
            id[i] = primes.size();
            primes.push_back(i);
            for (int j = i; j < V; j += i){
                d[j].push_back(i);
            }
        }
    }
    for (int i = 0; i < n; i++){
        for (auto p : d[a[i]])
            pos[id[p]].push_back(i);
    }
    while (m--){
        cin >> l >> r >> k;
        l--; //下标从0开始,做-1
        r--;
        k--;
        int D = rangegcd(l, r);
        if (D % primes[k] == 0){ 
            cout << (D != primes[k]) << '\n';
            continue;
        }
        int ans = r - l + 1;
        ans -= upper_bound(pos[k].begin(), pos[k].end(), r) - lower_bound(pos[k].begin(), pos[k].end(), l);
        cout << ans << '\n';
    }
}

官方题解代码真是漏洞百出,居然在C++14中CE。

相关推荐
间歇性努力持续性发呆的野生快乐选手几秒前
栈的性质(进栈,出栈,访问)
数据结构·c++
旖旎夜光27 分钟前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
乐观勇敢坚强的老彭2 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
我变成萤火虫2 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
buhuizhiyuci3 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
liulilittle3 小时前
LLM 推理引擎与内核系统工程原理
c++·ai·llm·内存·memory·core·kernel
啦啦啦啦啦zzzz3 小时前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
键盘会跳舞3 小时前
C++:右值引用与移动语义源码级深度拆解——现代C++性能优化的语言基石
c++·右值引用·移动语义
码匠许师傅4 小时前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
lidtao4 小时前
青少年信息学奥赛C++四阶段学习路线(L1-L4完整体系)
c++·学习·软件工程·教培资源分享