首页 > 其他分享 >LG7521 [省选联考 2021 B 卷] 取模

LG7521 [省选联考 2021 B 卷] 取模

时间:2022-10-24 21:00:07浏览次数:112  
标签:取模 loc 省选 tot 模数 ans include 联考

LG7521 [省选联考 2021 B 卷] 取模

给定 \(n\) 个正整数 \(a_i\),请你再其中选出三个数 \(i,j,k(i\neq j,i\neq k,i\neq k)\),使得 \((a_i+a_j)\bmod a_k\) 的值最大。

复杂度不太会证,说一下做法。

顺序不影响答案,先排序一下。

模数大的时候答案更大的可能性会更高,所以我们从大到小选择模数。对于每个模数,计算出剩余的数对其取模的值组成的新的序列。容易发现答案的和要么是两个数的和小于模数,或者大于等于模数,小于模数的两倍。

  • 两个数的和小于模数,对新序列排序之后,确定一个数时就能通过二分查找很快求出和最大值。
  • 两个数的和大于模数,可以发现取到这个最大的和就是新序列的最后两项之和。

然后加上一些不难想的剪枝即可。据说复杂度是 \(O(n\log ^2n)\) 的(如果值域与 \(n\) 同阶)。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef pair<ll,ll>ttfa;
inline ll read(){
	ll x=0,f=1;char ch=getchar();
	while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=getchar();}
	while('0'<=ch&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*f;
}

using namespace std;
const int N=200005;
int n,a[N],ans,b[N];

int main(){
	n=read();
	for(int i=1;i<=n;++i)a[i]=read();
	sort(a+1,a+1+n);
	for(int i=3;i<=n;++i)
		ans=max(ans,(a[i-2]+a[i-1])%a[i]);
	for(int i=n;i>=1&&a[i]>ans;--i){
		if(a[i]==a[i+1])continue;
		int tot=0;
		for(int j=1;j<=n;++j)
			if(j!=i)b[++tot]=a[j]%a[i];
		if(tot>=2)ans=max(ans,(b[tot]+b[tot-1])%a[i]);
		sort(b+1,b+1+tot);
		for(int j=tot;j>=1;--j){
			int loc=upper_bound(b+1,b+j+1,a[i]-b[j]-1)-b-1;
			//printf("%d %d %d\n",a[i],j,loc);
			if(loc<1)continue;
			if(loc>=j)break;
			ans=max(ans,b[j]+b[loc]);	
		}
	}
	printf("%d\n",ans);
	return 0;
}

标签:取模,loc,省选,tot,模数,ans,include,联考
From: https://www.cnblogs.com/BigSmall-En/p/16822770.html

相关文章

  • 计算机取模运算
    一、模的概念模实际指的就是一个范围,下面摘抄自百度百科的一段话:“模”是指一个计量系统的计数范围,如过去计量粮食用的斗、时钟等。计算机也可以看成一个计量机器,因为计......
  • AcCoders 10477:【省选基础数据结构 树链剖分】【GDOI2016】疯狂动物城 题解
    算法:树链剖分,可持久化线段树。题目大意给定\(n\)个结点的一棵树,\(m\)次操作,操作有三种:将\(x\)至\(y\)最短路径上的所有点的权值加上\(delta\)。对于\(x\)至......
  • 取模运算优化
    取模优化常见的做法是加法取模转减法,或者积累数据之后一次性取模,不过这些没有真正的加快取模运算,只是减少了取模的运算次数。真正想要把取模做到和加减一样快(\(O(1)\))已......
  • AcCoders 10665:【省选基础 模拟】魔兽世界终极版 题解
    一句话,大模拟,对着题意敲就完了。干就完了,奥利给!正正好好618行~//10665ProblemG:【省选基础模拟】魔兽世界终极版#include<iostream>#include<cstdio>#include......
  • 10月联考试卷反思
    一、语文成绩:96.5二、数学成绩:78三、数学加试(武汉某模拟试题)成绩:85四、英语成绩:114.5五、物理原始成绩:73赋分:84六、化学原始成绩:54赋分:61七、地理原始成绩:5......
  • [联合省选2021] 宝石 题解(详细解密)
    [省选联考2021]宝石给定一棵\(n\)个点的树,每个点上有一颗种类是\(w_i\)的宝石,宝石种类共\(m\)种,有一个收集器,按照\(P_1,P_2,...,P_c\)的先后顺序收集宝石(就是说......
  • [联考]钻石教练
    给定\(n\),和一个\(k\)次多项式,对于每个\(m\len\),设\(\sigma\)为一个大小为\(m\)且拆出的所有循环大小都为\(3\)的倍数的置换,\(|sp(\sigma)|\)为它拆出的循环数......
  • P4384 [八省联考 2018] 制胡窜
    P4384[八省联考2018]制胡窜考虑先将问题转化为切断两个位置使得没有任何一段中包含\(t\)。则最终的答案为\(\dbinom{n}{2}-\text{ans}\)。计\(t\)按左端点排序后......
  • [挑战记录][省选联考 2022] 预处理器
    2022100220:30开始答题20:35先水\(20\)分21:30假了,重构2022100306:34\(60\)分19:45继续重构,学习了一些\(\operatorname{string}\)的科技20:18过了#inclu......
  • 22 暑期 CD 班联考 Day4 之降低力度
    WZY在线捐献瞳孔沙城之巅城市定向SUNZH在线学猫叫新知之神SSHWY在线送温暖......