专栏文章
题解:AT_agc047_a [AGC047A] Integer Product
AT_agc047_a题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miq7ro11
- 此快照首次捕获于
- 2025/12/04 00:21 3 个月前
- 此快照最后确认于
- 2025/12/04 00:21 3 个月前
题意
给定 个实数 到 ,求有多少对 ()使得 是整数。
,。 小数点后不超过 位。
解法
显然, 是一个整数。如果 是整数,那么 后面得有 个 ,也就是它是 的倍数。
如果一个数是 的倍数,那么它质因子 的个数和 的个数都 。
先把每个 都乘上 ,计算出它质因子 和 的个数。再暴力判断之前有多少个数和它乘在一起符号要求。
CPP#include <bits/stdc++.h>
using namespace std;
#define db long double
#define ll long long
const int maxn=2e5+5;
int n;
ll ans,cnt[50][20];//cnt[i][j] 表示质因子2的个数为i,5的个数为j的数的个数
db a[maxn];
int main(){
cin >> n;
for(int i=1;i<=n;i++){
scanf("%Le",&a[i]);
int c2=0,c5=0;
ll x=round(a[i]*1e9);//round一下,不然精度会爆炸
while(!(x%2)) x/=2,c2++;
while(!(x%5)) x/=5,c5++;//计算
for(int j=18-c2;j<50;j++)
for(int k=18-c5;k<20;k++)
ans+=cnt[j][k];
cnt[c2][c5]++;
}
printf("%lld\n",ans);
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...