题解:
tags:[预处理][gcd]
故事背景:光头钻进了茫茫人海。
这是一个典型の通过前缀后缀和来降低复杂度的问题。
先用pre数组与suf数组分别维护前缀gcd和后缀gcd。
如果 a[i] % gcd(pre[i-1], suf[i+1]) != 0;
那么光头就从人群中钻出来了!
gcd(pre[i-1],suf[i+1])就是我们要的答案。
注意n=1时的特判!

code:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL;
const int NICO = 100000 + 10;
int n; vector<int> v;
LL a[NICO], pre[NICO], suf[NICO];
LL gcd(LL x, LL y)
{
return (y==0)?x:gcd(y, x%y);
}
int main()
{
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
cin >> a[i];
}
if(n == 1)
{
cout << (LL)2e18 << endl;
} else {
int pos = 0;
pre[1] = a[1]; suf[n] = a[n];
for(int i=2;i<=n;i++)
{
pre[i] = gcd(a[i], pre[i-1]);
}
for(int i=n-1;i>=1;i--)
{
suf[i] = gcd(a[i], suf[i+1]);
}
for(int i=2;i<=n-1;i++)
{
LL tmp = gcd(pre[i-1],suf[i+1]);
if(a[i] % tmp)
{
pos = i;
}
}
if(a[1] % suf[2]) pos = 1;
if(a[n] % pre[n-1]) pos = n;
// pos 表示光头出现的位置
if(pos==1) swap(a[1], a[2]), pos = 2;
LL res = a[1];
for(int i=2;i<=n;i++)
{
if(i!=pos) res = gcd(res, a[i]); // 碰见光头就跳过!
}
cout << res << endl;
}
}

  

HackerRank The Chosen One [预处理][gcd]的更多相关文章

  1. ECNU 3480 没用的函数 (ST表预处理 + GCD性质)

    题目链接  ECNU 2018 JAN Problem E 这题卡了双$log$的做法 令$gcd(a_{i}, a_{i+1}, a_{i+2}, ..., a_{j}) = calc(i, j)$ ...

  2. HDU 5869 Different GCD Subarray Query (GCD种类预处理+树状数组维护)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 问你l~r之间的连续序列的gcd种类. 首先固定右端点,预处理gcd不同尽量靠右的位置(此时gc ...

  3. HDU 5726 GCD (RMQ + 二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...

  4. [COJ0528]BJOI幸运数

    [COJ0528]BJOI幸运数 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见"试 ...

  5. Codeforces 474F - Ant colony

    注意到每个区间生存下来的蚂蚁的长度等于区间的gcd 于是可以先预处理出区间的gcd 然后二分查找就好了 预处理gcd我这里用的是倍增法 总的时间复杂度O(NlogN) /* Cf 271F 倍增求区间 ...

  6. Project Euler 453 Lattice Quadrilaterals 困难的计数问题

    这是一道很综合的计数问题,对于思维的全面性,解法的过渡性,代码能力,细节处理,计数问题中的各种算法,像gcd.容斥.类欧几里德算法都有考察.在省选模拟赛中做到了这题,然而数据范围是n,m小于等于100 ...

  7. 10.9 guz模拟题题解

    感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...

  8. Magolor的数据结构作业

    \(CodeForces 706E ~Working routine\) 给出一个矩阵,每次操作交换两个子矩阵,求最后状态. 使用链表存储,每次交换后,影响到的之后矩阵边缘的指针,暴力修改. \(~~ ...

  9. X000010

    P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意:求 \({\rm S}(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m{\rm lcm} ...

随机推荐

  1. Hadoop1.0.3环境搭建流程

    0x00 大数据平台相关链接 官网:http://hadoop.apache.org/ 主要参考教程:http://www.cnblogs.com/xia520pi/archive/2012/05/1 ...

  2. devexpress设置皮肤、字体以及折叠菜单、伸缩Panel的实现

    1.为了体现系统的个性化,越来越多的系统增加了换肤功能.这里例举一个devexpress实现换肤的案例,效果图对比: 第二张图片中更换了皮肤与字体. 2.皮肤数据源绑定代码: //循环添加皮肤名称 f ...

  3. Qt中纯C++项目发布为dll的方法(超详细步骤)

    众所周知,我们可以将C++项目中的类以及某些方法导出,形成 .dll 文件,以供其他程序使用,下面将说明Qt环境下的使用方法. 首先创建共享库,步骤如下: 下一步会出现类对话框等等,不用管它,直接点击 ...

  4. 2017-2-19 C#基础 数据类型

    数据类型分为基本数据类型和引用类型.基本数据类型分为两大类,值类型,字符型(char)和布尔型(bool).其中值类型分为整型和浮点型.整型分为byte,short,int,long.常用的是int( ...

  5. django-查询语句(一)

    1.model 假设我们的model如下: 某个JobType下有很多Job. class JobType(models.Model): name = models.CharField(max_len ...

  6. 学习ASP.NET MVC(十)——排序

    1 按照价格对书籍进行排序 下面我们通过一个简单的例子学习如何对书籍信息按照价格进行排序. 首先,我们在Controllers\BookController.cs文件中的SearchIndex方法添加 ...

  7. Java设计模式之《桥接模式》及应用场景

    摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6497919.html 这里摘抄一份他处的概念,你可以不必理会,先看下面得讲解与实例, ...

  8. 深入理解Node系列-细说Connect(上)

    前言 想必对于广大前后端的同学们,Node 或是用来作为网站服务器的搭建,亦或是用来作为开发脚手架的运用,或是早有套路,亦或是浅尝辄止.从现在开始博主将会不定时的对 Node 系列的产品做分析,其中夹 ...

  9. 新浪微博iOS SDK UIImage+WBSDKResize.o

    Undefined symbols for architecture armv7: "_kCGImageSourceThumbnailMaxPixelSize", referenc ...

  10. 一个服务器启动多个tomcat(详细图解)

    1.官网下载一个tomcat,复制一个副本(第二个tomcat) 2.添加2个环境变量(右键单击我的电脑->选择属性->选择高级->选择环境变量),是2个tomcat的位置,环境变量 ...