首页 > 其他分享 >Codeforces Round #846 (Div. 2) B. GCD Partition

Codeforces Round #846 (Div. 2) B. GCD Partition

时间:2023-01-29 19:35:14浏览次数:63  
标签:846 gcd ... int sum Partition Codeforces ans GCD

B. GCD Partition

参考题解链接 : Codeforces Round #846 (Div. 2) — Tutorial - Codeforces


题意 : 给一个长度为 n 的序列, 并将其分成连续的 k(k > 1), 得到序列 b, 使得 \(gcd(b_{1}, b_{2}, b_{3}, ..., b_{k} )\) 的值最大

思路 : 当 k = m 时, 就能得到序列: \(b_{1}, b_{2}, b_{3}, ..., b_{m}\). 因为 \(b_{1}\) 和 \(b_{2}\) 都是 \(gcd(b_{1}, b_{2}, b_{3}, ..., b_{m} )\) 的公约数, 那么可得 \(b_{1} + b_{2}\) 也是 \(gcd(b_{1}, b_{2}, b_{3}, ..., b_{m} )\) 的公约数, 所以有 \(gcd(b_{1}, b_{2}, b_{3}, ..., b_{m} ) \le gcd(b_{1}+ b_{2}, b_{3}, ..., b_{m} )\).

以此类推, 当 k = 2 时, 和 k 等于其他数(也就是分大于两块的情况), 答案不会受到影响, 那么就可以暴力枚举分成两份的情况


代码

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 2e5 + 10;
int a[N];

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        scanf("%d", &n);
        LL sum = 0;
        for (int i = 0; i < n; i++) scanf("%d", &a[i]), sum += a[i];

        LL ans = 1, cur = 0;
        for (int i = 0; i < n - 1; i++) {
            cur += a[i], sum -= a[i];
            ans = max(ans, __gcd(cur, sum));
        }

        printf("%lld\n", ans);
    }

    return 0;
}

标签:846,gcd,...,int,sum,Partition,Codeforces,ans,GCD
From: https://www.cnblogs.com/oneway10101/p/17073657.html

相关文章

  • Codeforces Round #846 (Div. 2)
    题目链接D题意给定一个数字n,我们需要通过一系列的操作去猜测这个数字。初始的时候会给我们一个cnt,表示二进制下数字n有多少个1.每次我们可以给出一个t,然后另n减去t,系统......
  • B. GCD Partition
    B.GCDPartitionWhileatKira'shouse,Josukesawapieceofpaperonthetablewithataskwrittenonit.Thetasksoundedasfollows.Thereisanarray$a$......
  • Codeforces Round 846
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1780。执念就像是记错的二级结论一样可怕的东西。冥冥之中有一种结论错了的感觉,但总是觉......
  • Codeforces Round #846 (Div. 2) E. Josuke and Complete Graph(数论分块)
    题意:给定一个区间[L,R],求其中任意两个数字的gcd的不同的种类总数。链接:https://codeforces.com/contest/1780/problem/E其中L<=1e9,1<=L<=R<=1e18。tips:本篇题解中除标......
  • gcd(a, b) = gcd(b, a % b)的证明
    \[\hugegcd(a,b)=gcd(b,a\modb)的证明\]首先假设存在\(a,b,c\)这三个数,若其满足\(a=q*b+c\),证明:\((a,b)=(b,a\modb)\)证明:\(\because\)首先可以由\(......
  • Codeforces Round #846 (Div. 2)
    E.JosukeandCompleteGraph题目抽象为求\(\gcd(i,j)\)有多少种\((i\neqj,i\in[l,r],j\in[l,r])\),如:当\(l=2,r=4\)时,\(\gcd(2,4)=2\),\(\gcd(2,3)=\gcd(3,4)=1\)......
  • CF1780B GCD Partition
    从\(k\)的角度出发,可以发现一定存在某种\(k=2\)的划分方式,使得最终获得的分数最大。为什么呢?假定划分为\(k=3\)时取得了最大分数,即\(\gcd(b_1,b_2,b_3)=g......
  • CF 1780-D. Bit Guessing Game_Codeforces Round #846 (Div. 2) D
    一道交互题有一个数字a(1<=a<=1e9),给出它的二进制表示中'1'的数目最多30次询问,每次询问输出"-x",之后给出a-x后的二进制表示中'1'的数目,最后以这样的形式"!ans"输出原数字......
  • Codeforces Round #846 (Div. 2) 解题报告
    CodeforcesRound#846(Div.2)解题报告\(\text{ByDaiRuiChen007}\)ContestLinkA.HayatoandSchool简单题,发现答案要么是一奇两偶、要么是三个奇数,分别考虑两种......
  • 扩展欧几里得算法 exgcd
    凌:前言\(\tt\#include~"\)\(\tt{\small\texttt{扩展欧几里得算法-}}OI~Wiki\)\(\tt"\)\(\tt\#include~"\)\(\tt{\small\texttt{关于}}~exgcd~{\small\texttt{求得......