题目链接

http://www.bnuoj.com/bnuoj/problem_show.php?pid=34777

题意

如样例

输入

1
5
30 60 20 20 20

输出

80

如  30 和 60 的最大公约数是 30 他们是两个数 因而为2*30=  60  但他不是最大的  60 20 20 20 的最大公约数是 20  他们有四个数 4*20=80;他是最大的

所以输出 80;

代码     1;

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#define ll long long
using namespace std;
ll a[100000+10];
map<ll,ll>v;
map<ll,ll>::iterator it,itit;
ll Max(ll x,ll y)
{
return x>y?x:y;
}
ll gcd(ll a,ll b)
{
if(a==0) return b;
if(b==0) return a;
return gcd(b,a%b);
}
int main()
{
int t,n;
scanf("%d",&t);
while (t--)
{
ll ans=0;
scanf("%d",&n);
v.clear();
for (int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
ans=Max(ans,a[i]);
for (it=v.begin();it!=v.end();it++)
{
if(gcd(it->first,a[i])!=it->first)
{
if (v[gcd(it->first,a[i])]==0)
v[gcd(it->first,a[i])]=it->second;
itit=it++;
v.erase(itit,it);
it--;
}
}
if (v[a[i]]==0)v[a[i]]=i;
for (it=v.begin();it!=v.end();it++)
{
ans=Max(ans,(it->first)*(i-it->second+1));
}
}
printf("%lld\n",ans);
}
return 0;
}

代码   2;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define LL long long
LL num[100010];
struct node
{
LL g,len;
int t;
} gc[100010];
LL gcd(LL a,LL b)
{
if(!b) return a;
else return gcd(b,a%b);
}
LL ma(LL a,LL b)

{
return a>b?a:b;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,len=0,st=-1;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%lld",&num[i]);
LL maxx=0;
for(int i=0; i<n; i++)
{
maxx=ma(maxx,num[i]);
gc[len].g=num[i];
gc[len].len=1;
gc[len].t=st;
st=len++;
int la=st;
for(int j=gc[st].t; j>=0; j=gc[j].t)
{
gc[j].g=gcd(gc[j].g,num[i]);
while(gc[j].t>=0&&gc[j].g==gcd(num[i],gc[gc[j].t].g))
{
//printf("%d %d: %lld %lld\n",j,gc[j].t,gc[j].g,gcd(num[i],gc[gc[j].t].g));
gc[gc[j].t].g=gc[j].g;
j=gc[j].t;
}
gc[la].t=j;
gc[j].len++;
la=j;
maxx=ma(maxx,gc[j].len*gc[j].g);
}
//for(int j=st; j>=0; j=gc[j].t)
// printf("%lld %d\n",gc[j].g,gc[j].len);
//puts("");
}
printf("%lld\n",maxx);
}
return 0;
}

BNU Online Judge-34777-Magical GCD的更多相关文章

  1. 4052: [Cerc2013]Magical GCD

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

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

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

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

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

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

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

  5. [BZOJ4052][Cerc2013]Magical GCD

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

  6. UVA - 1642 Magical GCD 数学

                                  Magical GCD The Magical GCD of a nonempty sequence of positive integer ...

  7. 【NOIP2014模拟8.17】Magical GCD

    题目 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. 分析 根据暴力的思想, \( ...

  8. Open judge C16H:Magical Balls 快速幂+逆元

    C16H:Magical Balls 总时间限制:  1000ms 内存限制:  262144kB 描述 Wenwen has a magical ball. When put on an infin ...

  9. BZOJ 4052: [Cerc2013]Magical GCD

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

  10. uva 1642 Magical GCD

    很经典的题目,愣是没做出来.. 题意:给出一个序列,求一子序列,满足其GCD(子序列)* length(子序列)最大. 题解: 类似单调队列的思想,每次将前面所得的最大公约数与当前数进行GCD,若GC ...

随机推荐

  1. HDU 5170 GTY's math problem

    数学题,a的b次方和c的d次方都很大,直接判断是做不出来的. 如果我们能找到一个函数F(x)是单调的,而F(X)的值又比较好算,那么可以通过比较F(X)的大小来判断自变量的大小. 令F(X)=log( ...

  2. 由于 web 服务器上此资源的访问控制列表(acl)配置或加密设置,您无权查看此目录或页面。

    场景:IIS中遇到无法预览的有关问题(HTTP 异常 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置 IIS中遇到无法预览的问题(HTTP ...

  3. jsp设置footer底部内容

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. must override a superclass method

    <properties>        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>       ...

  5. Struts1、2种如何防止表单重复提交和两者的区别

    使用token指令牌就行了.在进入标签之前的action中通过saveToken方法保存指令牌.在表单提交后的action中判断这个token是否存在,如果存在允许插入,并通过resetToken把t ...

  6. Cocos2dx 3.1.1 学习笔记整理(4):事件监听与Action的初步使用

    项目忙,趁着刚才有点空,看了下触摸事件在新版本中怎么实现,遇到问题都是去:cocos2d-x-3.1.1\tests\cpp-tests\Classes下面找的,里面都是一些小例子. 首先新的CCNo ...

  7. html-div-css

    用CSS实现拉动滚动条时固定网页背景不动   body{        background-image: url(./inc/bgbk.jpg);        background-attachm ...

  8. Ubuntu Nginx安装

    1.先更新ubuntu系统 更新命令 sudo apt-get update sudo apt-get upgrade 2 添加ubuntu nginx更新源镜像 cd /etc/apt/ sudo ...

  9. MySQL的IP处理函数inet_aton()和inet_ntoa()

    给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数.地址可以是4或8比特地址. mysql> SELECT inet_aton ...

  10. JDBC操作数据时中文乱码

    /** * DB地址 */ private static final String DB_URL="jdbc:mysql://localhost:3306/db_book?useUnicod ...