[CSP-S模拟测试]:平方数(数学+哈希)
题目传送门(内部题137)
输入格式
第一行,一个正整数$n$。
第二行$n$个正整数$a_1\sim a_n$。
输出格式
输出一个整数,为满足条件的二元组个数。
样例
样例输入:
5
1 2 3 4 12
样例输出:
2
数据范围与提示
对于$20\%$的数据,满足$n\leqslant 3,000$。
对于$50\%$的数据,满足$n\leqslant 50,000$。
对于另$20\%$的数据,满足$a_i\leqslant 1,000$。
对于$100\%$的数据,满足$1\leqslant n\leqslant 300,000,1\leqslant a_i\leqslant 10^9$。
题解
两个数相乘为平方数即其在分解质因数后奇数次的数相同。
这个可以用哈希维护,用$unordered\text{_}map$记录一下就好了。
质数比较多,但是我们可以只利用前几个质数就好了。
时间复杂度:$\Theta(kn)$($k$为利用的质数的个数)。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int>mp;
int n;
int pri[170],cnt;
bool vis[1000];
long long ans;
void pre_work()
{
for(int i=2;i<1000;i++)
{
if(vis[i])continue;pri[++cnt]=i;
for(int j=i;j<1000;j+=i)vis[j]=1;
}
}
int main()
{
pre_work();
scanf("%d",&n);
while(n--)
{
int x,res=1;
scanf("%d",&x);
for(int i=1;i<=cnt;i++)
{
while(!(x%(pri[i]*pri[i])))x/=pri[i]*pri[i];
if(!(x%pri[i])){x/=pri[i];res*=pri[i];}
}
if((int)(sqrt(x))*(int)(sqrt(x))!=x)res*=x;
ans+=mp[res];mp[res]++;
}
printf("%lld",ans);
return 0;
}
rp++
[CSP-S模拟测试]:平方数(数学+哈希)的更多相关文章
- [CSP-S模拟测试]:不等式(数学)
题目描述 小$z$热衷于数学.今天数学课的内容是解不等式:$L\leqslant S\times x\leqslant R$.小$z$心想这也太简单了,不禁陷入了深深的思考:假如已知$L,R,S,M$ ...
- [CSP-S模拟测试]:装饰(数学)
题目传送门(内部题147) 输入格式 每个测试点第一行一个正整数$T$,表示该测试点内的数据组数. 接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示. 输出格式 对每组数据输出一行一个 ...
- [CSP-S模拟测试]:最大值(数学+线段树)
题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...
- [CSP-S模拟测试]:Six(数学)
题目传送门(内部题85) 输入格式 一个正整数$N$. 输出格式 一个数表示答案对$1000000007$取模后的结果 样例 样例输入1: 样例输出1: 样例输入2: 样例输出2: 样例输入3: 样例 ...
- [CSP-S模拟测试]:礼物(数学)
题目传送门(内部题80) 输入格式 第一行输入一个正整数$n$. 第二行到第$n+1$行每行两个正整数$a_i$和$b_i$表示第$i$个礼物中包含$a_i$个红宝石和$b_i$个绿宝石. 输出格式 ...
- [CSP-S模拟测试]:木板(数学)
题目传送门(内部题68) 输入格式 输入有若干行,每行一个整数$N$,以$0$结束 输出格式 每行一个整数表示方案数,方案不同当且仅当$E$.$F$.$G$的坐标不同 样例 样例输入: 1020100 ...
- [CSP-S模拟测试]:chess(数学)
题目描述 $dirty$在一个棋盘上放起了棋子. 棋盘规格为$n\times m$,他希望任意一个$n\times n$的区域内都有$C$个棋子.$dirty$很快就放置好了一个满足条件的棋盘方案,但 ...
- [CSP-S模拟测试]:棋盘(数学+高精度)
题目描述 在一个大小为$N\times N$的棋盘上,放置了$N$个黑色的棋子.并且,对于棋盘的每一行和每一列,有且只有一个棋子.现在,你的任务是再往棋盘上放置$N$个白色的棋子.显然,白色棋子不能与 ...
- [CSP-S模拟测试]:Simple(数学)
题目描述 对于给定正整数$n,m$,我们称正整数$c$为好的,当且仅当存在非负整数$x,y$,使得$n\times x+m\times y=c$. 现在给出多组数据,对于每组数据,给定$n,m,q$, ...
随机推荐
- linux小白家教学<一>
<数据中心规划与实施> 教学大纲 编写人:Allen 一. 课程教学内容及目标: (一) 知识目标 1.掌握企业级LINUX部署以及相关配置: 2.掌握LINUX操作系统基本的创建.删除 ...
- java基础: synchronized与Lock的区别
主要区别 1. 锁机制不一样:synchronized是java内置关键字,是在JVM层面实现的,系统会监控锁的释放与否,lock是JDK代码实现的,需要手动释放,在finally块中释放.可以采用非 ...
- java native本地方法详解(转)
文章链接出处: 详解native方法的使用 自己实现一个Native方法的调用 JNI 开始本篇的内容之前,首先要讲一下JNI.Java很好,使用的人很多.应用极 广,但是Java不是完美的.Java ...
- jquery的ajax方法使用application/json出现400错误码的解决方案
400说明是客户端错误,将contentType默认的application/x-www-form-urlencoded改成application/json就出现错误,说明传输的数据不是JSON. 解 ...
- ASP.NET Core[源码分析篇] - Authentication认证
原文:ASP.NET Core[源码分析篇] - Authentication认证 追本溯源,从使用开始 首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务 ...
- 简单了解journalctl
journalctl 命令 journalctl是什么以及作用? journalctl 用来查询 systemd-journald 服务收集到的日志.systemd-journald 服务是 syst ...
- json串到java对象
json串到java对象 前端传入参数json字符串,格式如下: {"语文":"88","数学":"78"," ...
- 用ant打包
Eclipse 内置了 Ant . Ant 是一种类似于批处理程序的软件包,它主要繁琐的工作是编写和调试自动处理脚本(一个 XML 文件),但只要有了这个脚本,我们就可以一键完成所有的设定工作. 本节 ...
- kubeadm安装k8s1.13
1.环境介绍: centos 7.4.1708 关闭selinux和iptable,环境很重要! 主机 ip地址 cpu核数 内存 swap host解析 k8s-master 10.0.0.11 2 ...
- or/in/union与索引优化
假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...