[Cerc2013]Magical GCD
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的更多相关文章
- 4052: [Cerc2013]Magical GCD
4052: [Cerc2013]Magical GCD Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 148 Solved: 70[Submit][ ...
- 【BZOJ4052】[Cerc2013]Magical GCD 乱搞
[BZOJ4052][Cerc2013]Magical GCD Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续 ...
- [BZOJ4052][Cerc2013]Magical GCD
[BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续子序列中,它们 ...
- BZOJ 4052: [Cerc2013]Magical GCD
以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...
- BZOJ.4052.[Cerc2013]Magical GCD(思路)
BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...
- 【bzoj4052】[Cerc2013]Magical GCD 暴力
题目描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 样例输入 1 5 30 60 2 ...
- 【数论】【暴力】bzoj4052 [Cerc2013]Magical GCD
考虑向一个集合里添加一个数,它们的gcd要么不变,要么变成原gcd的一个约数.因此不同的gcd只有log个. 所以对于每个位置,维护一个表,存储从这个位置向前所有的不同的gcd及其初始位置,然后暴力更 ...
- 【BZOJ】【4052】【CERC2013】Magical GCD
DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小 ...
- Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
/** 题目:Magical GCD UVA 1642 链接:https://vjudge.net/problem/UVA-1642 题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量 ...
随机推荐
- 【bzoj2820】GCD
Time Limit: 3000 ms Memory Limit: 256 MB description 神犇GJS虐完数论后给zzHGR出了一个数论题. 给定n,m,求1≤x≤n,1≤y≤m ...
- SpringBoot初探之Swagger配置
Swagger是一个用于描述和测试restful接口的工具,只要在定义restful接口时增加一些类和方法的描述注解,通过很简单的配置就可以得到一个展示接口定义页面,也可以在页面上设置参数提交测试接口 ...
- 关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法
一.问题描述: 使用ajax请求json数据的时候,无论如何返回的响应编码都是ISO-8859-1类型,因为统一都是utf-8编码,导致出现返回结果中文乱码情况. $.ajax({ type:&quo ...
- java 关于性别的处理
运用数结构的思想(在数据库中把性别的值设置为 男 1 女 0) //数据结构思想应用 public static final Integer EMP_GENDER_OF_MAN = 1; public ...
- Android Screen Monito
1.下载 Android Screen Monitor http://code.google.com/p/android-screen-monitor/ (1) 下載 ASM_2_40.zip 并解压 ...
- Web开发,浏览器通讯原理及流程那点事,你应该听说下
题外话: 最近园子里,关于.net门槛的文章风风火火,不过这类事情每过段时间就会出来一次,所以酱油都懒的打了. 当然个人也是有想法的,特别是这两天碰巧和一个三四年经验的java开发者呆在一起,对方说. ...
- 使用BigDecimal报的错
错误:java.lang.arithmeticexception: non-terminating decimal expansion; no exact representa 小数位膨胀 解决方法 ...
- js中判定this的规则
判定this new绑定:新建对象; var bar = new foo(); 明确绑定(call.apply,bind):指定对象; var bar = foo.call(obj) 隐含绑定:环境对 ...
- input依次输入密码
原理: 一个真正的可以输入的input框,opacity: 0,设定位层级:(视图不可见的) 再来6(n)个input,readyonly,用来显示,type为password,设置好样式:(视图可见 ...
- 自定义TabBar之理解hittest
需求的TabBar是这样的:5个 tabItem, 中间的那个 item 部分超出系统默认TabBar的上边界. 那么实现的关键点就是如何在点击它突出的部分的时候,也可以正常获得响应.我来把问题简化, ...