• 【NOIP2014模拟8.17】Magical GCD


    Description

    对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数。给你一个序列,求出这个序列最大的 Magical GCD。

    Input

    单个测试点包含多组数据。

    输入的第一行是一个整数T表示数据组数。

    每组数据的第一行是一个整数N,描述序列长度。

    接下来N个数字,描述这个序列元素A[i]。

    Output

    对于每组测试数据输出一行,包含一个整数,表示序列最大的 Magical GCD。

    题解

    暴力出正解。
    注:int64!!

    代码

    var
      t,n,m:longint;
      ans:int64;
      a,b:array [0..100001] of int64;
      l:array[0..100001] of longint;
    function gcd(o,p:int64):int64;
    begin
      if p=0 then exit(o);
      exit(gcd(p,o mod p));
    end;
    
    function max(o,p:int64):int64;
    begin
      if o>p then exit(o);
      exit(p);
    end;
    
    procedure init;
    var
      i:longint;
    begin
      readln(n);
      ans:=0; m:=1; l[1]:=1;
      for i:=1 to n do
        begin
          read(a[i]);
          ans:=max(ans,a[i]);
        end;
      for i:=1 to n-1 do
        b[i]:=gcd(a[i],a[i+1]);
      for i:=1 to n-2 do
        if (b[i] mod b[i+1])<>0 then
          begin
            inc(m); l[m]:=i+1;
          end;
      l[0]:=-1; l[m+1]:=maxlongint;
    end;
    
    procedure main;
    var
      i,j,len:longint;
      gcdt:int64;
    begin
      len:=0;
      for i:=1 to n-1 do
        begin
          while l[len]<=i do inc(len);
          dec(len); gcdt:=b[i];
          for j:=len downto 1 do
            begin
              ans:=max(ans,(i-l[j]+2)*gcdt);
              gcdt:=gcd(gcdt,b[l[j]-1]);
              if gcdt=1 then
                begin
                  ans:=max(ans,i+1);
                  break;
                end;
            end;
        end;
    end;
    
    begin
      readln(t);
      while t>0 do
        begin
          init;
          main;
          writeln(ans);
          dec(t);
        end;
    end.
    
    
    
  • 相关阅读:
    SQL语句优化(转)
    ConcurrentHashMap源码分析
    centos 上安装gearman
    从与UCenter集成的过程中,看到Discuz的不开放
    UCenter实现同步登陆
    讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
    Truncate Table
    mysql中key 、primary key 、unique key 与index区别
    PHP登录时限
    用Fragment实现如新浪微博一样的底部菜单的切换
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319563.html
Copyright © 2020-2023  润新知