即求删掉一个子序列的gcd之和。注意到前后缀gcd的变化次数都是log级的,于是暴力枚举前缀gcd和后缀gcd即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,a[N],prepos[N],prenum[N],precnt,sufpos[N],sufnum[N],sufcnt,ans;
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj4921.in","r",stdin);freopen("bzoj4921.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read();for (int i=1;i<=n;i++) a[i]=read();prepos[0]=0;for (int i=1;i<=n;i++)if (gcd(a[i],prenum[precnt])!=prenum[precnt]) precnt++,prepos[precnt]=i,prenum[precnt]=gcd(a[i],prenum[precnt-1]);prepos[precnt+1]=n+1;sufpos[0]=n+1;for (int i=n;i>=1;i--)if (gcd(a[i],sufnum[sufcnt])!=sufnum[sufcnt]) sufcnt++,sufpos[sufcnt]=i,sufnum[sufcnt]=gcd(a[i],sufnum[sufcnt-1]);sufpos[sufcnt+1]=0;for (int i=0;i<=precnt;i++)for (int j=0;j<=sufcnt;j++){int x=gcd(prenum[i],sufnum[j]);for (int k=prepos[i];k<prepos[i+1];k++) ans=(ans+1ll*x*max(0,sufpos[j]-max(sufpos[j+1],k+1))%P)%P;}ans-=a[1],ans-=a[n];while (ans<0) ans+=P;cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/10043417.html

BZOJ4921 互质序列相关推荐

  1. bzoj4921: 互质序列

    传送门 首先题目答案可以分为三部分:只取左边,只取右边,两边都取. 发现这些问题可以由前缀gcd和后缀gcd得到. 然后可以证明前缀gcd和后缀gcd一定可以分成段数不超过logAi的相同子序列. 因 ...

  2. bzoj 4921: [Lydsy六月月赛]互质序列

    4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec  Memory Limit: 256 MB Submit: 188  Solved: 110 [Submit][Stat ...

  3. BZOJ 4921: 互质序列 数学 枚举

    4921: 互质序列 Time Limit: 1 Sec  Memory Limit: 256 MB Submit: 112  Solved: 61 [Submit][Status][Discuss] ...

  4. BZOJ4921「Lydsy1706月赛」互质序列

    吐槽一下BZOJ没有C++11  题还是不难的 BZOJ 4921 题意 在长度为$ n$的数列中去掉非空的连续一段并保证剩下数字不少于$ 2$ 求合法的所有方案中剩下数字的最大公约数的总和 $Sol ...

  5. 三个数互质 java_LeetCode 5198. 丑数 III(Java)容斥原理和二分查找

    请你帮忙设计一个程序,用来找出第 n 个丑数. 丑数是可以被 a 或 b 或 c 整除的 正整数. 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释:丑数序列为 ...

  6. 两个互质整数的线性组合问题

    两个互质整数的线性组合问题 本文我们讨论两个互质整数的线性组合问题,以及相关的二元一次不定方程. 两个互质整数的线性组合 已知两个整数aaa和bbb互质,即gcd⁡(a,b)=1\gcd(a,b)=1 ...

  7. `Computer-Algorithm` 数论基础知识 (同余,取模,快速幂,质数,互质,约数,质因子)

    catalog 同余 取模 快速幂 质数 互质 约数 质因子 @Delimiter(旧解释) 经验谈 两数之差也整除 加一的特殊性 取模 累加的周期性 取模的唯一集合 取模下的四则运算 除法的不可约性 ...

  8. 题目52:输入两个正整数m和n,判断m和n是否互质(即最大公约数为1),是则输出Yes,否则输出No。

    题目转载:http://python.wzms.com/s/1/53 题目描述: 输入两个正整数m和n,判断m和n是否互质(即最大公约数为1),是则输出Yes,否则输出No. 输入格式: 输入两个整数 ...

  9. 容斥原理之求区间中与某数互质的个数

    一,定义 为了计算时不重不漏,就要不断加减重复部分 观察到:即奇数长度的前面是加号,偶数长度的为减号 二,思路:我们这里可以通过求不互质的数,自然就能得出互质的数,求不互质比较简单(因为他们是目标的质 ...

最新文章

  1. 【AAAI2022】多任务推荐中的跨任务知识提炼
  2. 用ESX进行虚拟化的技巧连载五:代理/防火墙服务虚拟化
  3. mysql notes
  4. PHP的类与对象-笔记
  5. [云炬创业管理笔记]第二章成为创业者讨论3
  6. 请解释下Spring 框架中的IOC 容器?
  7. IT企业是如何选择容器管理平台的
  8. java -jar xxx.jar
  9. Jenkins之注入自定义环境变量
  10. 锁定计算机注册表,如何禁用注册表?Win7注册表锁定bat制作方法
  11. hihocoder题目选讲
  12. linux亮度调节指令,Linux Mint 亮度调节——xrandr命令学习
  13. !impotent的标准支持
  14. 开源社已加入群聊,思否 AIGC Hackathon 扩列
  15. 一个人的孤独,一群人的狂欢!
  16. jquery选择器通配符_jQuery选择器不等于通配符
  17. ALBRECHT铣刀夹头BT50 20-32
  18. async/await的用法
  19. 关于虚拟机及dockers
  20. 2 Resnet系列网络模型改进

热门文章

  1. The Standard C Library电子书pdf下载
  2. python随机模块 无范围_Python模块:生成随机数模块random
  3. RGBD融合原理及实践
  4. ACM:P: 三家人
  5. CSS(长度单位,RGB值,盒子模型)
  6. PDF文件的加密与破解
  7. Xcode 真机调试之 Unable to install “xxx“
  8. 2022:眯眼看世界、回首望自己(附送给订阅朋友们的福利)
  9. 基于C-W节约算法的车辆路径规划问题的Java实现
  10. 360浏览器在进入新的网页时,如何取消弹出小窗口