4052: [Cerc2013]Magical GCD
时间:2022-05-08
本文章向大家介绍4052: [Cerc2013]Magical GCD,主要内容包括4052: [Cerc2013]Magical GCD、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
4052: [Cerc2013]Magical GCD
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 148 Solved: 70
Description
给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12。
求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大。
Input
Output
Sample Input
1 5 30 60 20 20 20
Sample Output
80
HINT
Source
题解:我会说这题暴力就水过了?= =实际上此题应该采用的方法也差不多就是暴力= =
很明显,当我们从后往前一路求最大公约数时,最多不会超过logN种(HansBug:因为要么就不变,要变就得至少少一半^_^),所以只需要记录下哪些地方可能引起公因数变化即可——
具体方法:求出两两相邻的两数的最大公约数,然后将所有的前一个公因数不是后一个的倍数的位置记录下来,后面专门留意这些位置即可(HansBug:很明显,要是前者是后者的倍数的话,那么既然都是后面的因数,则必然是前面的因数,不可能引起变化,所以记录下这些就够了,之所以不直接把原数列这么干是因为事实证明两两求下之后的数列突然变得异常优美,想想为什么^_^)
还有个萌萌哒优化:当当前的最大公因数即使到数列最前面都难以超越当前最大值的话,就可以跳掉了
(如上是对比,上面的无优化的,下面的是优化的,事实证明快了不是一点= =)
1 /**************************************************************
2 Problem: 4052
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:1644 ms
7 Memory:2180 kb
8 ****************************************************************/
9
10 var
11 i,j,k,l,m,n,t:longint;
12 ans,v:int64;
13 a,b:array[0..100005] of int64;
14 c:array[0..100005] of longint;
15 function gcd(x,y:int64):int64;inline;
16 var z:int64;
17 begin
18 while y<>0 do
19 begin
20 z:=x mod y;
21 x:=y;
22 y:=z;
23 end;
24 exit(x);
25 end;
26 begin
27 readln(t);
28 while t>0 do
29 begin
30 readln(n);ans:=0;m:=1;c[1]:=1;
31 for i:=1 to n do
32 begin
33 read(a[i]);
34 if a[i]>ans then ans:=a[i];
35 end;
36 readln;
37 for i:=1 to n-1 do b[i]:=gcd(a[i],a[i+1]);
38 for i:=1 to n-2 do
39 if (b[i] mod b[i+1])<>0 then
40 begin
41 inc(m);c[m]:=i+1;
42 end;
43 c[m+1]:=maxlongint;c[0]:=-1;
44 l:=0;
45 for i:=1 to n-1 do
46 begin
47 while c[l]<=i do inc(l);
48 dec(l);v:=b[i];
49 for j:=l downto 1 do
50 begin
51 if int64(int64(i-c[j]+2)*v)>ans then ans:=(int64(i-c[j]+2)*v);
52 v:=gcd(v,b[c[j]-1]);
53 if int64(int64(i+1)*v)<=ans then break;
54 if v=1 then
55 begin
56 if (i+1)>ans then ans:=i+1;
57 break;
58 end;
59 end;
60 end;
61 writeln(ans);
62 dec(t);
63 end;
64 readln;
65 end.
- 解决mstsc无法连接问题:由于没有远程桌面授权服务器可以提供许可证…
- Apache/Nginx伪静态规则匹配http://出现的问题与解决
- 微信文件微起底
- Go语言TCP Socket编程--1
- Go语言TCP Socket编程--2
- 服务器 数据库设计技巧--1
- CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法
- zabbix监控在lnmp环境下编译安装小记
- 【重磅】百度开源分布式深度学习平台,挑战TensorFlow (教程)
- WordPress评论ajax动态加载,解决静态缓存下评论不更新问题
- WordPress显示访客UA信息:Show UserAgent纯代码轻度汉化版
- WordPress开启颜色评论但不造成XSS漏洞的小方法
- WordPress强迫症技巧:让文章(ID)地址完美连续(障眼法)
- iOS内存管理:从MRC到ARC实践
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++核心准则SF.6:(只)为转换,基础库或在局部作用域内部使用using namspace指令
- C++核心准则SF.7:不要在头文件中的全局作用域中使用using namespace指令
- 二叉树:看看这些树的最小深度
- Hive初体验
- Hive数据的存储以及在centos7下进行Mysql的安装
- 一个改进的数学学习工具
- 配置hive的元数据到Mysql中
- 二叉树:我有多少个节点?
- POST请求和GET请求如何传递和接收解析参数
- 二叉树:我平衡么?
- 机器学习中的常用编码方式(二)
- 个人Next主题配置文件
- 数组中出现次数超过一半的数字
- 二叉树:找我的所有路径?
- Java每日一题20201008