#双指针#洛谷 7521 [省选联考 2021 B 卷] 取模
分析
将 \(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 卷] 取模的更多相关文章
- 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)
洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\) 算法通过,因此可以考虑 \(\mathcal O(n^2 ...
- 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)
题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...
- 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)
洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\) \(10^9\) 的时代了吗?落伍了落伍了/ ...
- 洛谷P6623——[省选联考 2020 A 卷] 树
传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...
- 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)
题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...
- [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂
题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...
- [省选联考 2021 A 卷] 矩阵游戏
很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...
- [省选联考 2021 A/B 卷] 卡牌游戏
垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...
- [省选联考 2020 A 卷] 组合数问题
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...
- luoguP6623 [省选联考 2020 A 卷] 树(trie树)
luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...
随机推荐
- OpenCV开发笔记(五十八):红胖子8分钟带你深入了解图像的矩(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FastAPI中全局异常处理
装饰器版本自定义异常 1.首先我们定义三个文件,分别为exception.py,main.py, user.py 2.自定义异常需要继承HTTPException,该异常可以从fastapi中直接导入 ...
- Linux开端---Centos
Linux-Centos 虚拟化所需工具:https://pan.baidu.com/s/1643-kYcx9oPGnGEZM1pLOw?pwd=g0v5 提取码:g0v5 问题解决 正常注册网络适配 ...
- SDWebImage从小白到大师蜕变
简介 SDWebImage提供的简洁的获取远程URL图片的API:平时开发中使用最多场景就是列表中的cell中要显示远程图片的需求,在具体的实现中要避免加载图片造成的界面卡顿,列表卡顿等现象的出现:所 ...
- 【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
问题描述 很早之前,介绍了在 App Service for Linux中挂载 Storage Account共享文件,当时Windows无法实现这个功能.而现在,App Service For Wi ...
- Java //使用scanner从键盘输入多种类型
1 //1.引入包名 import java.util.Scanner 2 //2.新建Scanner对象 3 Scanner scan = new Scanner(system.in); 4 //3 ...
- Java与sql中的字符串表示
在 Java 中,双引号 "" 用于表示字符串字面量,而单引号 '' 用于表示字符字面量.这意味着在 Java 中,您可以使用双引号来包围包含任意数量字符的字符串,包括零个字符(空 ...
- centos下配置修改hosts文件以及生效命令详解
linux服务器hosts文件配置 hosts文件是Linux系统中一个负责IP地址与域名快速解析的文件,以ASCII格式保存在"/etc"目录下,文件名为"hosts& ...
- C++中的不规则二维数组
技术背景 最近刚学习C++的一些编程技巧,对于一些相对比较陌生的问题,只能采取一些简单粗暴的方案来实现.就比如说,我们可以在Python中定义一个[[0,0,0],[1,2],[1,1,1],[3]] ...
- 发布DDD脚手架到Maven仓库,IntelliJ IDEA 配置一下即可使用
作者:小傅哥 博客:https://bugstack.cn 项目:https://gaga.plus 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主,小傅哥. 这篇文章将帮助粉丝 ...