from NOIP2016模拟题34

Description

给定一个长度\(n\le 10^6\)的序列, 给定\(A, B\)

给出一个序列,要求你通过如下两个操作使得序列中所有数的最大公约数大于1,每个操作最多使用一次

1:删除一段连续的数,代价为删除的长度$*A $

2:将任意多个数+1或-1,代价为 \(B *\)数的个数

Analysis

由于删除也至少留下一个数

最后的gcd一定是a[1]-1,a[1],a[1]+1,a[n]-1,a[n],a[n]+1六个数中

某个数的质因数的倍数

Solution

考虑每个可能的质因数:

two_pointer搞出删除的区间

其他用修改操作

预处理出哪些数必须修改chg[i]

哪些数必须删除must[i]

若对当前two_pointer区间

修改要修改的数优于区间删除

就将左区间右移一下

two_pointer移的时候要保证合法

Code

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int M=1000007; inline int rd(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
}
int n;
int a[M];
int fac[M*12],cnt=0;
LL A,B;
LL chg[M];
LL must[M];
LL ans=9223372036854775807; void solve(int p){
int i,l,r;
for(i=1;i<=n;i++){
chg[i]=must[i]=0;
if (a[i] % p == 0) continue;
if((a[i]+1)%p==0||(a[i]-1)%p==0) chg[i]=1;
else if(a[i]%p) must[i]=1;
}
for(i=1;i<=n;i++) chg[i]+=chg[i-1];
for(i=1;i<=n;i++) must[i]+=must[i-1]; for(l=1,r=1;r<=n;r++){//two_pointer求删除区间
if(must[n]-must[r]) continue;//不合法
if(l==1&&r==n) l=2;//不能全删
while(l<=r&&must[l]==0&&(chg[r]-chg[l-1])*B<=(r-l+1)*A) l++;//更优且移动和合法
ans=min(ans,(chg[l-1]+chg[n]-chg[r])*B+(r-l+1)*A);
}
} void split(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0) fac[++cnt]=i;
while(x%i==0) x/=i;
}
if(x>2) fac[++cnt]=x;
} int main(){
int i;
n=rd(),A=rd(),B=rd();
for(i=1;i<=n;i++) a[i]=rd();
split(a[1]); split(a[1]-1); split(a[1]+1);
split(a[n]); split(a[n]-1); split(a[n]+1);
sort(fac+1,fac+cnt+1);
cnt=unique(fac+1,fac+cnt+1)-(fac+1);
for(i=1;i<=cnt;i++)
solve(fac[i]);
printf("%lld\n",ans);
return 0;
}

xsy 1845 - GCD的更多相关文章

  1. POJ 1845 (约数和+二分等比数列求和)

    题目链接: http://poj.org/problem?id=1845 题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1) ...

  2. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  3. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  4. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  5. 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  6. GCD的相关函数使用

    GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...

  7. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  8. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  9. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

随机推荐

  1. Java中的List接口特有的方法

    import java.util.ArrayList; import java.util.List; /* List接口中特有方法: 添加 add(int index, E element) addA ...

  2. nodejs安装遇到npm命令无法使用问题

    解决方法: 在用户文件夹中建立npm文件夹就可以使用了. 再使用npm命令就可以了.

  3. Bootstrap历练实例:默认的缩略图

    本章将讲解Bootstrap缩略图,大多数站点都需要要在网格中布局图像,视频,文本.Bootstrap通过缩略图为此提供了一些简便的方法,使用Bootstrap创建缩略图的步骤如下: 1.在图像的周围 ...

  4. Android读书笔记二

    本章讲到需要Android应用程序以及Android NDK程序来测试Linux驱动,所以所需要的工具都必须配备好.而且对工具的版本也是有一些要求,JDK,Eclipse,ADT,CDT,Androi ...

  5. STL容器之Array[转]

    转自https://blog.csdn.net/sin_geek/article/details/51067874 作者 Sin_Geek 简介 array在头文件<array> 中定义 ...

  6. 【卡常 bitset 分块】loj#6499. 「雅礼集训 2018 Day2」颜色

    好不容易算着块大小,裸的分块才能过随机极限数据:然而这题在线的数据都竟然是构造的…… 题目描述 有 $n$ 个数字,第 $i$ 个数字为 $a_i$. 有 $m$ 次询问,每次给出 $k_i$ 个区间 ...

  7. java工作环境配置jdk,idea

    下载 jdk 1.8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置环境 ...

  8. k8s资源指标API及metrics-server资源监控

    简述: 在k8s早期版本中,对资源的监控使用的是heapster的资源监控工具. 但是从 Kubernetes 1.8 开始,Kubernetes 通过 Metrics API 获取资源使用指标,例如 ...

  9. iPhone如何设置自定义铃声?无需连接电脑,轻松几步就搞定!

    转载自: https://baijiahao.baidu.com/s?id=1594988016778457969&wfr=spider&for=pc 受够了iPhone自带的千篇一律 ...

  10. python导出开发环境

    1.导出开发环境的依赖包 本地开发完后,再把代码给别人之前,需要 pip freeze > pip123.txt 2.其他环境安装依赖包 pip install -r pip123.txt 其他 ...