Codeforces Round 954 (Div. 3) G2. Permutation Problem (Hard Version)(数论)

题目

给定n(n<=5e5)的排列p,求满足pi*pj是i*j倍数的(i,j)对数

实际t(t<=1e4)组数据,保证sumn不超过5e5

思路来源

propane(cup_pyy)代码

题解

pi*pj=k*i*j

(pi/i)*(pj/j)=k,比如,(4/3)*(9/2)=6,

一定存在pi的约数x、pj的约数y满足(2/3)*(3/2)=1

暴力这么做是一个log一个约数个数d(n)的

这个时间复杂度应该可以过G2,但是这个G2卡空间,写map会mle43,手写哈希也卡不过

参考了一些选手的写法,写成了倍数枚举的形式

代码1(MLE)

朴素想法,时间复杂度是对的,

可以过G1,但是会在G2上MLE

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back    
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
//(pi/i)*(pj/j)=k
//(4/5)*(15/4)=3
//(4/3)*(6/2)=4
//(2/3)*(3/2)=1
const int N=5e5+10;
int t,n,p[N];
map<P,int>mp;
vector<int>fac[N];
int gcd(int x,int y){return !y?x:gcd(y,x%y);}
int main(){for(int i=1;i<N;++i){for(int j=i;j<N;j+=i){fac[j].pb(i);}}sci(t);while(t--){sci(n);ll ans=0;mp.clear();rep(i,1,n){sci(p[i]);int x=p[i],y=i,g=gcd(x,y);x/=g,y/=g;for(auto &v:fac[x]){//y/xif(mp.count({y,v})){ans+=mp[{y,v}];}}for(auto &v:fac[x]){//x/ymp[{v,y}]++;}}ptlle(ans);}return 0;
}

代码2

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back    
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
//(pi/i)*(pj/j)=k
//(4/5)*(15/4)=3
//(4/3)*(6/2)=4
//(2/3)*(3/2)=1
const int N=5e5+10;
int t,n,p,now[N];
vector<int>ask[N],add[N],fac[N];
int gcd(int x,int y){return !y?x:gcd(y,x%y);}
int main(){for(int i=1;i<N;++i){for(int j=i;j<N;j+=i){fac[j].pb(i);}}sci(t);while(t--){sci(n);ll ans=0;rep(i,1,n){ask[i].clear();add[i].clear();}rep(i,1,n){sci(p);int x=p,y=i,g=gcd(x,y);x/=g,y/=g;if(y==1)ans--;//减去自己ask[y].pb(x);//ans+=mp[(y,v)] v是x约数add[x].pb(y);//mp[(v,y)]++ v是x约数}rep(i,1,n){for(int j=i;j<=n;j+=i){for(auto &y:add[j]){now[y]++;}}for(auto &x:ask[i]){for(auto &v:fac[x]){ans+=now[v];}}for(int j=i;j<=n;j+=i){for(auto &y:add[j]){now[y]--;}}}ptlle(ans/2);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Simufact Additive增材制造支撑创建功能

增材制造工艺作为近年来制造行业的顶流&#xff0c;一直备受各行业关注。除了率先大范围展开增材制造应用的航空行业&#xff0c;在汽车、电子乃至医疗行业也都有了不俗的进展。深谙增材制造工艺的学者都直言&#xff1a;使用3D打印简单&#xff0c;但应用好比较难。那是因为这…

常用设计模式实例代码汇总

目录 单例模式 原型模式 外观模式 简单工厂模式 工厂方法模式 抽象工厂方法 策略模式 装饰模式 观察者模式 适配器模式 状态模式(状态类切换) 状态模式(环境类切换) 单例模式 void Main() {Singleton instance1 Singleton.GetInstance();Singleton instance2 Sin…

【高校科研前沿】四川大学刘超研究员为一作在《Geophys. Res. Lett.》发表团队成果:植被形态影响河床泥沙输运

文章简介 论文名称&#xff1a;Plant morphology impacts bedload sediment transport 第一作者及单位&#xff1a;刘超&#xff08;研究员|四川大学水利水电学院&#xff09; 通讯作者及单位&#xff1a;Yuqi Shan&#xff08;四川大学灾后重建与管理研究所&#xff09; 文…

【HashMap和HashSetyi以及散列表的拉链法,线性探测法详解】

&#x1f308;个人主页&#xff1a;SKY-30 ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &…

昇思25天学习打卡营第2天 | 张量Tensor

张量Tensor 张量&#xff08;Tensor&#xff09;基础 张量是MindSpore中的基本数据结构的一种&#xff0c;类似于NumPy中数组和矩阵非常相似。它具有以下重要属性&#xff1a; 形状&#xff08;shape&#xff09;和数据类型&#xff08;dtype&#xff09;&#xff1a;每个张量…

射频技术在未来通信中的应用

低功耗广域网&#xff08;LPWAN&#xff09;技术 物联网的广泛应用需要低功耗、广覆盖的无线通信技术。低功耗广域网&#xff08;LPWAN&#xff09;技术如LoRa、NB-IoT和Sigfox等应运而生。这些技术在低功耗设计、远距离传输和大规模设备连接方面具有显著优势&#xff0c;使其…

Docker 常见命令快速查阅

基础命令 1. 帮助命令 docker versiondocker infodocker --help2. 镜像相关命令 列出主机的所有镜像 docker images [OPTIONS] # OPTIONS 说明&#xff1a;-a :列出本地所有的镜像&#xff08;含中间映像层&#xff09;-q :只显示镜像ID--digests :显示镜像的摘要信息--no-…

【Java基础】 网络编程

在数字化时代&#xff0c;网络编程已成为软件开发中的重要组成部分。无论是构建分布式系统、实现实时通讯还是进行Web开发&#xff0c;都需要深入了解网络编程的基础知识和技术。这种技能不仅在IT领域至关重要&#xff0c;还在非计算机行业的岗位中发挥着越来越重要的作用。Jav…

如何找到合适的Python第三方库?

找合适的Python库其实很简单&#xff0c;按照以下三步法&#xff0c;你能找到90%的Python库。 1、百度谷歌搜索 明确自己的需求&#xff0c;用Python来干什么&#xff0c;力求简短明了。比如定位“数据分析”&#xff0c;然后去搜索关键词【Python数据分析第三方库】&#xf…

基于 JWT 进行身份验证

一、JWT 介绍 JWT 本质上就是一组字串&#xff0c;通过&#xff08;.&#xff09;切分成三个为 Base64 编码的部分&#xff1a; Header : 描述 JWT 的元数据&#xff0c;定义了生成签名的算法以及 Token 的类型。Payload : 用来存放实际需要传递的数据Signature&#xff08;签…

考研数学|张宇和武忠祥,强化能不能同时跟?

可以说你跟武老师学明白了&#xff0c;120完全没问题&#xff01;如果追求更高&#xff0c;宇哥的怀抱也想你敞开&#xff01; 学长我21年一战数学83&#xff0c;总分没过线&#xff0c;22年二战143&#xff0c;逆袭上岸211&#xff01;市面上的老师我基本都听过&#xff0c;最…

微深节能 料场堆取料无人操作系统 格雷母线

格雷母线高精度位移检测系统在料场堆取料中的应用是一个重要的技术进步&#xff0c;它极大地提升了堆取料作业的自动化和精确性。 一、格雷母线定位系统概述 格雷母线高精度位移测量系统&#xff0c;包括格雷母线、天线箱、地址解码器、地址编码器四个部分组成。 格雷母线类似一…

大数据面试题之Hive(3)

目录 Hive的函数:UDF、UDAF、UDTF的区别? UDF是怎么在Hive里执行的 row_number&#xff0c;rank&#xff0c;dense_rank的区别 Hive count(distinct)有几个reduce&#xff0c;海量数据会有什么问题 HQL&#xff1a;行转列、列转行 一条HQL从代码到执行的过程 了解Hive S…

深入探索Kylin的Cube构建:数据魔方的构建之旅

深入探索Kylin的Cube构建&#xff1a;数据魔方的构建之旅 引言 Apache Kylin是一个开源的分布式分析引擎&#xff0c;提供Hadoop和Spark之上的高性能数据立方体&#xff08;Cube&#xff09;技术。Kylin的Cube构建过程是其核心功能之一&#xff0c;它允许用户定义和构建多维数…

手动指定ubuntu环境下程序打包指定目录

Ubuntu在打包过程请自行检索其它文章&#xff1b; 在打包时候默认不能打包一些静态资源的&#xff0c;比如以配置文件为例config目录 当程序打包安装后&#xff0c;安装目录中没有config目录&#xff0c;这时候就需要我们手动创建config目录及目录中对应的配置文件等内容&…

Java养老护理助浴陪诊小程序APP源码

&#x1f496;护理助浴陪诊小程序&#x1f496; 一、引言&#xff1a;养老新趋势&#x1f331; 在快节奏的现代生活中&#xff0c;养老问题逐渐成为了社会关注的焦点。如何为老年人提供便捷、贴心的服务&#xff0c;让他们晚年生活更加安心、舒适&#xff0c;是我们每个人都需…

持续总结中!2024年面试必问的操作系统面试题(三)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问的操作系统面试题&#xff08;二&#xff09;-CSDN博客 五、什么是分页和分段&#xff1f;它们之间有什么区别&#xff1f; 分页和分段是操作系统中用于内存管理的两种不同技术&#xff0c;它们都旨在允许操作系统…

v-model中.lazy、.number、.trim

在Vue.js中&#xff0c;v-model 是一个非常核心的指令&#xff0c;它主要用于在表单输入和应用状态之间建立双向绑定。 Vue.js 提供了一些修饰符&#xff08;modifiers&#xff09;&#xff0c;这些修饰符可以用来指定不同的行为。.lazy、.number 和 .trim 就是这样的修饰符。 …

篮球联盟管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;球员管理&#xff0c;用户管理&#xff0c;球队管理&#xff0c;论坛管理&#xff0c;篮球资讯管理&#xff0c;基础数据管理 前台账户功能包括&#xff1a;系统首页&#xff0…

Transformer常见面试题

目录 1.Transformer为何使用多头注意力机制&#xff1f;&#xff08;为什么不使用一个头&#xff09; 2.Transformer为什么Q和K使用不同的权重矩阵生成&#xff0c;为何不能使用同一个值进行自身的点乘&#xff1f; &#xff08;注意和第一个问题的区别&#xff09; 3.Transf…