当前位置: 首页 > news >正文

GCD of Subset

 法1: 

const int N=1e6;
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,k; 
    cin>>n>>k;
    vector<int>a(n+1),cnt(N+10);/*桶cnt不要用map实现!!!速度太慢*/
    vector<vector<int>>v(N+10);
    for(int i=1;i<=n;i++) cin>>a[i];

    /*预处理1~N每个数的因数,复杂度O(调和级数),n=1e6,计算次数在1e8出头,1e8跑一下100ms~200ms,push_back一下1000ms了*/
    for(int i=1;i<=N;i++)
    for(int j=i;j<=N;j+=i)
    v[j].push_back(i);/*v[j]的因子按升序加进来*/

    /*统计数组a中含有因子x的数的个数*/
    for(int i=1;i<=n;i++)
    for(auto x : v[a[i]])
    cnt[x]++;

    for(int i=1;i<=n;i++){
        int ans;
        for(auto x: v[a[i]])
        if(cnt[x]>=k)
        ans=x;
        cout<<ans<<endl;
    }
}

预处理每个数的因子1000ms多了

法2:

const int N=1e6;
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,k; 
    cin>>n>>k;
    vector<int>a(n+1),cnt(N+10),mp(N+10),ans(N+10);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        mp[a[i]]++;
    }

    for(int i=1;i<=N;i++){
        for(int j=i;j<=N;j+=i)
        cnt[i]+=mp[j];
        if(cnt[i]<k) continue;
        for(int j=i;j<=N;j+=i)
        ans[j]=i;
    }

    for(int i=1;i<=n;i++)
    cout<<ans[a[i]]<<endl;
}

 二者都去统计了数组a中,含因子x的数的个数。对于数量大于等于k的因子x,更新a中所有以x为因子的数的答案

数据大时,桶最好手写(直接写数组),map耗时间。

1+1/2+1/3+...+1/n约1e8 (n取1e6)

#调和级数 #枚举 

25/2/16

相关文章:

  • 设计模式:代理模式
  • [250216] Fastfetch 2.36 版本发布 | Netrunner 25 “Shockworm” 正式发布!
  • 深入学习Linux命令行中的各种替换操作(命令替换、参数替换、进程替换)
  • 计算机网络原理试题三
  • 国产FPGA开发板选择
  • 04性能监控与调优篇(D5_JVM优化)
  • 物联网行业通识:从入门到深度解析
  • GitHub基本操作及Git简单命令
  • Code::Blocks 安装 一
  • 【人工智能】DeepSeek R1可以为我们做什么?
  • 贪吃蛇案例
  • Unity中如何判断URL是否为RTSP或RTMP流
  • 在 Linux 系统中,tc(Traffic Control) QoS 常用命令简介
  • 总线-AXI
  • 二分之一车辆模型研究不同参数下车辆对地面的动载荷和动载系数
  • 每日一题——兑换零钱(一)
  • 【Linux】【进程】epoll内核实现总结+ET和LT模式内核实现方式
  • axios
  • AF3​​​​​​​ get_atom_coords函数解读
  • 火语言RPA--字符串内插入字符串
  • 京东回应外卖系统崩溃:订单暴涨所致,已恢复
  • 袁思达已任中国科学院办公厅主任
  • AI含量非常高,2025上海教育博览会将于本周五开幕
  • 宝通科技:与宇树合作已签约,四足机器人在工业场景落地是重点商业化项目
  • 因操纵乙烯价格再遭诉讼,科莱恩等四家企业被陶氏索赔60亿
  • 云南威信麟凤镇通报“有人穿‘警察’字样雨衣参与丧事”:已立案查处