首页 > 其他分享 >每日一题——A - Max/Min AtCoder - abc356_e

每日一题——A - Max/Min AtCoder - abc356_e

时间:2024-08-01 12:40:22浏览次数:11  
标签:pre AtCoder 前缀 Min Max ij abc356 define


1.题目大意:枚举两个数的Max/Min向下取整之和。
2.思路:一开始并没有想时间复杂度问题发现通过sort()排序来遍历每个最小值Min和后面最大值的和就是题目答案。你会发现仍然有问题,那就是取整的问题你就必须要优化然后发现很明显超时了。现在我们来换一个角度思考。搭配前缀和嘛。为什么要用前缀和呀,很明显在同一倍数里,ij~i(j+1)-1 整除都是j嘛。这样子的话可以用前缀和来快速找出这些数的个数呀。pre[i]代表i和之前出现的次数和,pre[i]-pre[i-1]代表i也就是Min出现的次数。枚举倍数j,pre[min(i(j+1)-1,1000000)]-pre[ij-1]来表示同一倍数Max的个数。ans+=(ll)j(pre[min(i(j+1)-1,1000000)]-pre[ij-1])cnt;记住每次不要忘记减去重复的数。

点击查看代码
#include<bits/stdc++.h>
#define ok ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define fo(i,x,y) for(int i=x;i<=y;i++)
#define sd(a) cin>>a
#define sdd(a,b) cin>>a>>b
#define st(a) cout<<a<<endl
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll pre[N];
int main(){
	ok;
	int n;
	sd(n);
	fo(i,1,n){
		int x;
		sd(x);
		pre[x]++;
	}
	ll ans=0;
	fo(i,1,1e6)pre[i]=pre[i]+pre[i-1];
	fo(i,1,1e6){
		ll cnt=pre[i]-pre[i-1];
		if(!cnt)continue;
		for(int j=1;j*i<=1e6;j++){
			ans+=(ll)j*(pre[min(i*(j+1)-1,1000000)]-pre[i*j-1])*cnt;
		}
		ans-=(ll)cnt*(cnt+1)/2;
	}
	st(ans);
	return 0;
} 

标签:pre,AtCoder,前缀,Min,Max,ij,abc356,define
From: https://www.cnblogs.com/yueluoksguilu/p/18336412

相关文章

  • Atcoder ABC297 E-G
    AtcoderABC297E-GE-KthTakoyakiSet链接:E-KthTakoyakiSet简要题意:问题陈述有\(N\)种章鱼烧出售。一个\(i\)-种的章鱼烧售价为\(A_i\)日元。高桥总共至少会买一个章鱼烧。他可以购买多个同类章鱼烧。求高桥可能支付的\(K\)个最低价格。在这里,如果有多......
  • Solution - Atcoder AGC052B Tree Edges XOR
    令\(w_{(u,v)}\)为边\((u,v)\)的边权。考虑到对于一条边进行操作影响的是有公共点的边,于是一个想法是把边权转到点权,用点权来表示边权。于是考虑对于每个点构造\(w_u\)使得\(w_{(u,v)}=w_u\oplusw_v\)。因为这是一颗树,所以一定存在合法的构造。其实到了这里,这种......
  • Atcoder ABC296 F
    AtcoderABC296FF-SimultaneousSwap链接:F-SimultaneousSwap(atcoder.jp)简要题意:问题陈述给你两个\(N\)数字序列:\(A=(A_1,A_2,\ldots,A_N)\)和\(B=(B_1,B_2,\ldots,B_N)\)。高桥可以重复下面的操作任意多次(可能为零)。在\(1\)和\(N\)之间选择三......
  • Atcoder 356 C - Keys 二进制枚举
    原题链接:https://atcoder.jp/contests/abc356/tasks/abc356_c C-Keys:问题陈述您有 N 个编号为1,2,…,N 的密钥。其中一些是真钥匙,其他都是假钥匙。有一扇门,门X,你可以插入任意数量的钥匙。只有插入至少 K 把真钥匙,X门才会打开。你已经对这些钥匙进行了 M 次......
  • Solution - Atcoder APC001E Antennas on Tree
    首先考虑判定什么样的选取是合法的。考虑到令任意一个点\(u\)为根。若\(u\)有至少两个子树没有点选中,那么这两个子树是无法区分的。所以可以知道需要满足任意一个点为根,都至多存在一个子树内部没有选中的点。接下来就要贪心的选出最少的点了。考虑对于每个点的限制都是子......
  • RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anythi
    RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐1.MaxKBMaxKB=MaxKnowledgeBase,是一款基于LLM大语言模型的开源知识库问答系统,旨在成为企业的最强大脑。它能够帮助企业高效地管理知识,并提供智能问答功能。想象一......
  • Solution - Atcoder AGC028B Removing Blocks
    因为贡献的方法是相加,一种想法就是拆开,对每一项单独贡献。不难发现这题目中的贡献其实只涉及到两点之间。即删除\(x\)时\(y\)也产生了贡献。考虑这个贡献会在多少种排列中出现。令\(d=|x-y|+1\),即\(x,y\)中的点数。能发现排列需要满足除\(x\)外的\(d-1\)......
  • Atcoder ABC364 D-F
    AtcoderABC364D-FD-K-thNearest链接:D-K-thNearest(atcoder.jp)简要题意:问题陈述在一条数线上有\(N+Q\)个点\(A_1,\dots,A_N,B_1,\dots,B_Q\),其中点\(A_i\)的坐标为\(a_i\),点\(B_j\)的坐标为\(b_j\)。请就每个点\(j=1,2,\dots,Q\)回答下面的问题:......
  • 创建中间件后是否可以更新 FastAPI/Starlette SessionMiddleware 中的 max_age ?
    我需要限制某些用户的会话生命周期。问题是,max_age是在创建中间件时设置的,之后似乎无法更新。从中间件代码来看,似乎唯一的解决方案是创建一个具有所需的自定义中间件功能。有更好的解决方案吗?你说的没错,FastAPI/Starlette的SessionMiddleware在创建后不能直接......
  • Solution - Atcoder YPC2019E Odd Subrectangles
    首先对于\(0/1\)和为奇数,转化为异或为\(1\)来考虑。考虑如果已经确定了行的选取,又该如何计数。考虑对于每一列,都处理好在对应行的位置的异或值。然后记\(\operatorname{c}_0,\operatorname{c}_1\)表示列异或值为\(0/1\)的数量。知道了\(\operatorname{c}_0,\op......