https://vjudge.net/problem/UVA-1642

题意:在一个序列中,找出一段连续的序列,使得长度*gcd最大

固定右端点,当左端点从左向右移动时,gcd不变或变大

gcd相同时,序列越长越好

所以相同的gcd只记录最靠左的位置

当右端点由r转移向r+1时

重新计算gcd,然后去重

gcd最多只会有log个

#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 100001
using namespace std;
typedef long long LL;
LL a[N];
void read(LL &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
}
struct node
{
int sum,s[];
LL gcd[];
}cur,nxt;
LL getgcd(LL a,LL b) { return !b ? a : getgcd(b,a%b); }
int main()
{
int T,n;
LL ans,g;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
read(a[i]);
cur.gcd[]=a[]; cur.sum=cur.s[]=;
ans=a[];
for(int r=;r<=n;r++)
{
nxt.sum=;
nxt.s[]=cur.s[];
nxt.gcd[]=getgcd(cur.gcd[],a[r]);
for(int l=;l<=cur.sum;l++)
{
g=getgcd(cur.gcd[l],a[r]);
if(g!=nxt.gcd[nxt.sum])
{
ans=max(ans,nxt.gcd[nxt.sum]*(r-nxt.s[nxt.sum]+));
nxt.sum++;
nxt.gcd[nxt.sum]=g;
nxt.s[nxt.sum]=cur.s[l];
}
}
ans=max(ans,nxt.gcd[nxt.sum]*(r-nxt.s[nxt.sum]+));
if(a[r]!=nxt.gcd[nxt.sum])
{
nxt.gcd[++nxt.sum]=a[r],nxt.s[nxt.sum]=r;
ans=max(ans,a[r]);
}
cur=nxt;
}
printf("%lld\n",ans);
}
}

[Cerc2013]Magical GCD的更多相关文章

  1. 4052: [Cerc2013]Magical GCD

    4052: [Cerc2013]Magical GCD Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 70[Submit][ ...

  2. 【BZOJ4052】[Cerc2013]Magical GCD 乱搞

    [BZOJ4052][Cerc2013]Magical GCD Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续 ...

  3. [BZOJ4052][Cerc2013]Magical GCD

    [BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们 ...

  4. BZOJ 4052: [Cerc2013]Magical GCD

    以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...

  5. BZOJ.4052.[Cerc2013]Magical GCD(思路)

    BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...

  6. 【bzoj4052】[Cerc2013]Magical GCD 暴力

    题目描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 样例输入 1 5 30 60 2 ...

  7. 【数论】【暴力】bzoj4052 [Cerc2013]Magical GCD

    考虑向一个集合里添加一个数,它们的gcd要么不变,要么变成原gcd的一个约数.因此不同的gcd只有log个. 所以对于每个位置,维护一个表,存储从这个位置向前所有的不同的gcd及其初始位置,然后暴力更 ...

  8. 【BZOJ】【4052】【CERC2013】Magical GCD

    DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小 ...

  9. Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。

    /** 题目:Magical GCD UVA 1642 链接:https://vjudge.net/problem/UVA-1642 题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量 ...

随机推荐

  1. mybatis快速入门(八)-spring-mybatis动态代理整合

    将上一节的代码改造下就好了,不过这一章会加一个basedaomapper.废话不多说直接上代码了. 创建一个BaseDaoMapper.java package cn.my.sm.mapper; /* ...

  2. 【BZOJ2555】SubString(后缀自动机,Link-Cut Tree)

    [BZOJ2555]SubString(后缀自动机,Link-Cut Tree) 题面 BZOJ 题解 这题看起来不难 每次要求的就是\(right/endpos\)集合的大小 所以搞一个\(LCT\ ...

  3. 多米诺骨牌放置问题(状压DP)

    例题: 最近小A遇到了一个很有趣的问题: 现在有一个\(n\times m\)规格的桌面,我们希望用\(1 \times 2\)规格的多米诺骨牌将其覆盖. 例如,对于一个\(10 \times 11\ ...

  4. THUWC2018咸鱼记

    Day -inf 好不容易联赛水进来了 好虚啊...(萌新)什么都不会...只会大水题 估计要\(GG\)了,瑟瑟发抖 准备辣.. 自我介绍根本没面试,就没脸贴了 周围的大佬们(尤其\(Zsy\))还 ...

  5. Tomcat 设置开机自启

    操作系统centos6.5: Vim /etc/rc.local在末尾添加一下两行 source /etc/profile /test/tomcat/bin/startup.sh 我解释下为什么要加s ...

  6. 禁ping以及清理系统多余账号说明

    查出多余的:grep -v “nologin$“ /etc/passwd

  7. gulp详细入门

    gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试.检查.合并.压缩.格式化.浏览器自 ...

  8. handsontable 事件汇总

    Hook插件 afterChange (changes: Array, source: String):1个或多个单元格的值被改变后调用 changes:是一个2维数组包含row,prop,oldVa ...

  9. Java集合基本概念及元素添加

    Java容器类类库的用途是"保存对象", 并将其划分为两个不同的概念: (1)Collection: 一个独立元素的序列, 这些元素都服从一条或多条规则. List必须按照插入的顺 ...

  10. 微信小程序快捷键