题目传送门


分析

将 \(a\) 排序后从大到小枚举 \(a_k\),注意枚举的时候重复的只考虑一次,那么可以将其它数按照模 \(a_k\) 后排序,

答案只可能来自最大值与次大值之和取模或者之和最接近 \(a_k\)(后者利用双指针)

如果答案已经不小于 \(a_k\) 就退出整个循环,这样复杂度就是 \(O(n\log n\log a_i)\)

浅浅地证明一下,如果最终答案 \(ans\) 介于 \(a_{i-1}\) 和 \(a_i\) 之间。

那么对于任意 \(j\geq i\),\(ans\geq (a_j+a_{j+1})\bmod {a_{j+2}}\),因为一定能枚举到 \(a_{j+2}\) 计算答案。

可以发现取模是一定能模掉的,否则不可能比 \(a_i\) 小,所以 \(ans+a_{j+2}\geq a_j+a_{j+1}\)

移项得到 \(a_{j+2}-ans\geq (a_j-ans)+(a_{j+1}-ans)\),那么 \(\{a_i-ans\}\) 其实增长速度比斐波那契数列还要快,

在 \(10^8\) 内其实只有 \(\log\) 级别,复杂度大概就是这么证明的。


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=200011;
int n,m,a[N],b[N],c[N],ans;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
int main(){
n=iut();
for (int i=1;i<=n;++i) b[i]=a[i]=iut();
sort(b+1,b+1+n),m=unique(b+1,b+1+n)-b-1;
for (int i=m;i;--i){
if (b[i]<=ans) break;
for (int j=1;j<=n;++j) c[j]=a[j]%b[i];
sort(c+1,c+1+n);
if (c[n]+c[n-1]>=b[i]) ans=max(ans,c[n]+c[n-1]-b[i]);
else ans=max(ans,c[n]+c[n-1]);
for (int j=2,k=n;j<=n;++j){
while (k>1&&(j==k||c[j]+c[k]>=b[i])) --k;
if (k>1) ans=max(ans,c[j]+c[k]);
}
}
return !printf("%d",ans);
}

#双指针#洛谷 7521 [省选联考 2021 B 卷] 取模的更多相关文章

  1. 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)

    洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\)​ 算法通过,因此可以考虑 \(\mathcal O(n^2 ...

  2. 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)

    题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...

  3. 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)

    洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\)​ \(10^9\)​ 的时代了吗?落伍了落伍了/ ...

  4. 洛谷P6623——[省选联考 2020 A 卷] 树

    传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...

  5. 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)

    题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...

  6. [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂

    题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...

  7. [省选联考 2021 A 卷] 矩阵游戏

    很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...

  8. [省选联考 2021 A/B 卷] 卡牌游戏

    垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...

  9. [省选联考 2020 A 卷] 组合数问题

    题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...

  10. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

随机推荐

  1. 以二进制文件安装K8S之部署etcd高可用集群

    概述 前提条件:已经准备好CA根证书(etcd在制作CA证书时需要CA根证书),并且把CA根证书文件ca.key和ca.crt拷贝到3个etcd节点的/etc/kubernetes/pki目录下. 3 ...

  2. 【Python OO其二】设计模式之工厂模式(举例说明)

    工厂模式 工厂模式中的"工厂"实际上就是把类看成制造某种模板的工具(工厂),由这个类生成的实例除了本身自有的属性外,还可以通过指定的方式产出具有不同属性的同一类实例 比如:有一个面 ...

  3. 【Azure Key Vault】是否有直接方法将Azure Key Vault中的机密名称/机密值到处成文件呢?

    问题描述 是否有直接方法将Azure Key Vault中的机密名称/机密值导出,保存为一个文件呢? 问题解答 Azure Key Vault 没有直接提供Secret 导出文件(如xlsx格式)的方 ...

  4. Autofac入门与替代ASP.NET Core、ABP依赖注入容器

    目录 Autofac 的使用 1,简单的实践 2,注册组件 3,Lambda 注册组件 4,注册泛型 5,属性注入 6,解析服务 7,生命周期 8,实例作用域 9,Autofac 其它需要学习的知识 ...

  5. CPack 入门指南

    背景 CPack 是 CMake 2.4.2 之后的一个内置工具,用于创建软件的二进制包和源代码包. CPack 在整个 CMake 工具链的位置. CPack 支持打包的包格式有以下种类: 7Z ( ...

  6. 【自动化】使用PlayWright+代理IP实现多环境隔离

    Playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行Chromium.Firefox.WebKit等主流浏览器自动化 ...

  7. 科技大厂、手机厂商、企服领域齐发力,手机智能体成AI Agent新趋势

    AI Agent涌向移动终端,手机智能体势不可挡 还没搞清楚什么是AI Agent,手机Agent就已经横空出世 AIGC为何涌向移动端?背后有哪些逻辑?什么是手机智能体?一文看明白 科技大厂.手机厂 ...

  8. vagrant 多个box的操作|共享目录失败

    本来机器上已经有一个Ubuntu的box了,今天想在安装一个centos的box,结果还折腾了很长时间. 多个机器的命令 添加box的时候需要使用名称,一个的时候可以忽略名称 vagrant box ...

  9. 闭关修炼180天----手写迷你版的tomcat-Minicat

    手写迷你版的tomcat-Minicat 小谈Tomcat Tomcat请求处理⼤致过程 Tomcat是⼀个Http服务器(能够接收并且处理http请求,所以tomcat是⼀个http服务器) 我们使 ...

  10. obsidian 日记本倒序汇总 获取标题显示 插件dataviewjs list

    obsidian 日记本倒序汇总 获取标题显示 插件dataviewjs list // dataviewjs function removeDuplicate(arr) { return arr.f ...