首页 > 其他分享 ># [省选联考 2021 B 卷] 数对

# [省选联考 2021 B 卷] 数对

时间:2023-12-11 18:55:05浏览次数:29  
标签:le 省选 复杂度 数对 样例 times 枚举 倍数 联考

题目描述

给定 \(n\) 个正整数 \(a_i\),请你求出有多少个数对 \((i, j)\) 满足 \(1 \le i \le n\),\(1 \le j \le n\),\(i \ne j\) 且 \(a_i\) 是 \(a_j\) 的倍数。

输入格式

第一行,一个整数 \(n\),表示数字个数。
第二行,\(n\) 个整数,表示 \(a_i\)。

输出格式

输出一行,一个整数,表示答案。

样例 #1

样例输入 #1

6
16 11 6 1 9 11

样例输出 #1

7

样例 #2

样例输入 #2

见附件中的 pair/pair2.in。

样例输出 #2

见附件中的 pair/pair2.ans。

提示

对于 \(40 \%\) 的数据,\(n \le 1000\)。
对于 \(70 \%\) 的数据,\(1 \le a_i \le 5 \times {10}^3\)。
对于 \(100 \%\) 的数据,\(2 \le n \le 2 \times {10}^5\),\(1 \le a_i \le 5 \times {10}^5\)。

题解

对于这道题而言,我们首先想到的是枚举i和j,但是这样的枚举时间复杂度是\(O(n^2)\),根本过不去

根据套路,遇到约数问题,我们首先想到倍数问题,所以对于每个数,我们枚举他的倍数,同时将每个数存在桶里,这样就可以了,但是如果有1的话,所有的数都是他的倍数,所以1单独处理,同时1倍关系就是自己本身,所以也是单独处理

点击查看代码
for(int i=1;i<=n;i++){
        if(a[i]==1) continue;
        for(int k=2;k<=mx/a[i];k++)
            if(b[k*a[i]]) ans+=b[k*a[i]];
这样的代码,我过了这个题,但是我觉得这个时间复杂度是不对的,那这个时间复杂度具体是怎么分析呢?

这么分析,我么可以借鉴埃氏筛的时间复杂度分析,这个题简化起来,对于每一个小于等于mx的数,将其所有的倍数枚举一遍,时间复杂度为\(O(\sum_{i=1}^{n}\frac{mx}{a[i]})\),这样的时间复杂度为\(O(mxlog{mx})\),但是有一个前提是这些数都各不相同,如果都相同的话就不行,比如有1000个数字,前面都是2,最后一个数字是1000,这样的时间复杂度就是错的,所以我们在这样做之前,需要去重

这道题对我来说,最大的启示是时间复杂度的分析,当时没有想到埃氏筛相关,同时对去重的问题,之前也不知道。

标签:le,省选,复杂度,数对,样例,times,枚举,倍数,联考
From: https://www.cnblogs.com/sdfzls/p/17895088.html

相关文章

  • 【题解】LibreOJ #3051「十二省联考 2019」皮配
    传送门:https://loj.ac/p/3051  首先,对于这样“少部分个体有特殊要求”的题目,我们先考虑,如果没有任何个体有特殊要求怎么做,然后再考虑怎么加上特殊要求;对于这道题,如果$k=0$,即没有学校有不喜欢的导师,那么,设总人数为$al$,城市$i$的人数和为$cit_i$、选择的阵营为$zy_i=0/......
  • 基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览      2.算法运行软件版本Vivado2019.2 matlab2022a 3.算法理论概述3.1图像指数对比度增强概述     图像指数对比度增强是一种常见的图像处理方法,主要是通过改变图像的像素值来增强图像的对比度。具体来说,它通常通过将原始图像......
  • P1102 A-B 数对的三种解法
    1.利用map实现速查,优点是代码简洁,缺点是速度慢,内存大#include<bits/stdc++.h>usingnamespacestd;inta[200005]={0};intmain(){intn,c;scanf("%d%d",&n,&c);map<int,int>maps;for(inti=1;i<=n;i++){scanf("......
  • 省选联考2024游记
    这是一篇长达一个冬季的游记。追逐着雪将足迹又掩上迟来的我该如何去往你曾独行的方向11月11.24NOIP成绩出了,311,FJrk25,附中rk7,高一rk3,离校线差25pts。由于CSP的严重失利,我拿不到保在附创班的种子选手,当即就觉得,只能就此退役搞whk了吧。11.25上午跟czhou请假不去附......
  • 【2024省选冲刺计划】数据结构相关-线段树进阶
    线段树进阶0x01李超线段树FZPJ4519[2021冬令营模拟]上古遗迹【题目背景】“沙……沙……沙……”独行者的脚步一次次被刻进沙漠中,干冷的风携沙尘在男子的四围穿过。“该死……这沙尘什么时候才能消停会儿……”男子止不住地咳嗽,随即停了下来,开始查看便携式投影设备上的信......
  • 【2024省选冲刺计划】数据结构相关-根号数据结构
    根号数据结构0x01普通分块[2018NOIP模拟]蒲公英在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。为了简化起见,我们把所有的蒲公英看成一个长度为\(n\)的序列\((a_1,a_2,...,a_n)\),其中\(a_i\)为一个整数,表示第\(i\)棵蒲公英的种类编号。而每次询问......
  • c++ 为什么引入函数对象?
    C++引入函数对象主要是因为函数对象具有以下优势:函数对象可以有自己的状态:我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态。但是函数调用没这种优势,除非它使用全局变量来保存状态。函数对象有自己特有的类型,而普通函数无类型可言:这种特性对......
  • P9168 [省选联考 2023] 人员调度
    去年省选的时候还不会霍尔定理,想到了线段树分治想不了贪心。今年看感觉挺傻逼的。先线段树分治,把删除操作扔了。如果我们要知道一个人最后扔到哪里,那就是一个费用流问题,不太可能解决,考虑用霍尔定理刻画这个东西,我们发现,最后一个人的集合能匹配上当且仅当:计\(u\)子树里有\(p_u......
  • 【3.0】Python高级之函数对象与闭包函数
    【一】函数对象函数对象指的是函数可以被当做数据来处理,具体可以分为四个方面的使用【1】函数可以被引用#定义一个函数defadd(x,y):returnx+y#将函数地址绑定给一个变量func=add#通过这个变量找到对应的地址,从而调用函数res=func(1,2)print(res)......
  • 【教3妹学编程-算法题】数位和相等数对的最大和
    3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定”2哥 :啥?18岁就当爹啦?3妹:确切的说是14岁好吧。2哥 :哎,想我30了,还是个单身狗。3妹:别急啊,2嫂肯定在某个地方等着你去娶她呢。又不是结婚越早越好。2哥:是啊,这孩子14岁当爹,也太早了。3妹:2哥,你找女朋友有什么条件没有......