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

Codeforces Round 973 (Div. 2) F. The Sum of the k-th Powers 数论、暴力

题目链接

题目大意

给一个长度为 n n n ( 1 ≤ n ≤ 1 0 5 ) (1 \leq n \leq 10^5) (1n105)的数组 a [ i ] a[i] a[i] ( 1 ≤ a i ≤ 1 0 5 ) (1 \leq a_i \leq 10^5) (1ai105),可以对数组任意排序,求 g c d ( a 1 ) + g c d ( a 1 + a 2 ) + ⋅ ⋅ ⋅ + g c d ( a 1 , a 2 , ⋅ ⋅ ⋅ , a n ) gcd(a_1)+gcd(a_1+a_2)+ \cdot \cdot \cdot + gcd(a_1,a_2, \cdot \cdot \cdot ,a_n) gcd(a1)+gcd(a1+a2)++gcd(a1,a2,,an) 的最小值。

思路

首先在不断加入数的过程中, g c d gcd gcd 要么保持不变要么会下降,且最少会下降 2 2 2。考虑 g c d gcd gcd 的种类, l o g ( 1 0 5 ) / l o g ( 2 ) < 17 log(10^5)/log(2)<17 log(105)/log(2)<17 ,在这题也就最多16个。暴力循环最多16次找到使得 g c d gcd gcd下降最猛的数放前面,直到没有数使得 g c d gcd gcd 下降,剩下的所有数的前缀 g c d gcd gcd 值将保持为同一个最小的值,时间复杂度 O ( 16 ∗ n ) O(16*n) O(16n) .

code

#include<bits/stdc++.h>
#define int long long

using namespace std;
const int N=1e5+10;
int a[N];
bool st[N];

int gcd(int a,int b) {
    return b==0?a:gcd(b,a%b);
}

void solve() {
    int n;
    cin>>n;
    memset(st,0,sizeof st);
    for(int i=1;i<=n;++i)
        cin>>a[i];
    sort(a+1,a+n+1);
    int res=a[1];
    int now=a[1];
    st[1]=1;
    int cnt=1;
    while(1) {
        int flag=0;
        int tmp=now;
        for(int i=1;i<=n;++i) {
            if(st[i]) continue;
            if(gcd(a[i],now)<tmp) {
                tmp=gcd(a[i],now);
                flag=i;
            }
        }
        if(!flag) break;
        else {
            cnt++;
            st[flag]=1;
            now=tmp;
            res+=now;
        }
    }
    // cout<<cnt<<' '<<now<<'\n';
    res+=(n-cnt)*now;
    cout<<res<<'\n';
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}

相关文章:

  • 前端杂的学习笔记
  • Java之IO流
  • winform基于antdui中table控件的使用
  • System Enginner系统工程师成长思考
  • 爬虫相关的零碎知识
  • Android Activity的启动器ActivityStarter入口
  • 力扣刷题167. 两数之和 II - 输入有序数组
  • 游戏引擎学习第147天
  • sanitizer和valgrind
  • (二十七)Java-ThreadPoolExecutor
  • laravel中 添加公共/通用 方法/函数
  • 【从零开始学习计算机科学】计算机组成原理(一)计算机的发展历史 与 分类
  • Android Glide 图片解码与转换模块原理深度剖析
  • 开发ai模型最佳的系统是Ubuntu还是linux?
  • 链接器与加载器
  • golang中具有 “no copy“的类型
  • 基于SpringBoot的“积分制零食自选销售平台”的设计与实现(源码+数据库+文档+PPT)
  • 逐梦DBA:Linux版本 MySQL的安装
  • 初识Apache Flink:起源、设计理念与企业级应用全景解析
  • 跟着 Lua 5.1 官方参考文档学习 Lua (12)
  • 天津百度网站排名优化/广州seo招聘
  • 做网站网页的工作怎么样/网站建设的意义和作用
  • 自适应网站一般做多大尺寸/国内重大新闻十条
  • 上海百度嘉定公司网页设计/乐天seo培训
  • 网上购物的网站有哪些/推广软文200字
  • 如何给客户更好的做网站分析/网上国网推广