【NOIP2014模拟8.17】Magical GCD
2024-09-02 20:22:45
题目
对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数。给你一个序列,求出这个序列最大的 Magical GCD。
分析
根据暴力的思想,
\(枚举i,枚举j,a[j]=gcd(a[j],a[i])\)
答案就是\(max(a[j]*(i-j+1))\)
显然,当\(a[j]=a[j-1]\)的时候,\(a[j]\)就一定不会更新ans,所以,弄个双向链表,把\(a[j]\)踢掉。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=100005;
using namespace std;
long long a[N],n,m,T,p,q,last[N],next[N],ans;
long long gcd(long long x,long long y)
{
if(x!=0) return gcd(y%x,x);
else return y;
}
int main()
{
scanf("%lld",&T);
while(T--)
{
scanf("%lld",&n);
next[0]=1;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
last[i]=i-1;
next[i]=i+1;
}
last[1]=next[n]=0;
ans=0;
for(int i=1;i<=n;i++)
for(int j=next[0];j<=i && j;j=next[j])
{
a[j]=gcd(a[j],a[i]);
ans=max(a[j]*(i-j+1),ans);
if(a[j]==a[last[j]])
{
next[last[j]]=next[j];
last[next[j]]=last[j];
}
}
printf("%lld\n",ans);
}
}
最新文章
- iOS导航控制器常用函数与navigationBar常用属性
- *HDU1969 二分
- Three.js typescript definitely typed 文件
- Spark Streaming 事务处理彻底掌握
- 汇编查看StackFrame栈帧
- 一些不认识的开源js(更新ing。。。)
- jquery 判断是否 ie6 ie7 ie8
- BZOJ1596: [Usaco2008 Jan]电话网络
- While installing plugin in eclipse luna, “Unable to acquire PluginConverter service” and “No repository found” errors appear in logs
- spring Annotation 笔记2.1
- CountDownLatch与CyclicBarrier
- nginx rewrite重写
- 「JLOI2015」城池攻占 解题报告
- (线段判交的一些注意。。。)nyoj 1016-德莱联盟
- SpringBoot之OAuth2.0学习之客户端快速上手
- [模板][P3808]AC自动机(简单版)
- python学习笔记之二
- FileOutPutStream in 创新实训 自然语言交流系统
- 006-springboot2.0.4 配置log4j2,以及打印mybatis的sql
- swig的语法和用法
热门文章
- [Amazon] Program for Fibonacci numbers 斐波那契数列
- freebsd 隐藏ssh版本号
- USACO4.3 Buy Low, Buy Lower【简单dp&#183;高精度】
- jinja2模板接受
- shiro登陆认证
- 一、Kubernetes_V1.10集群部署-master-生成证书
- c语言Ι博客作业04
- 并发之AQS原理(二) CLH队列与Node解析
- 事件循环(EventLoop)的学习总结
- 解决 SQLPlus无法登陆oracle,PLSql可以登陆,报错ORA-12560