#3967. [GESP2406 七级] 区间乘积
[GESP2406 七级] 区间乘积
区间乘积
题目描述
⼩杨有⼀个包含 个正整数的序列 。 ⼩杨想知道有多少对 ( ) 满⾜ 为完全平⽅数。 ⼀个正整数 为完全平⽅数当且仅当存在⼀个正整数 使得 。
输入格式
第⼀⾏包含⼀个正整数 ,代表正整数个数。 第⼆⾏包含 个正整数 ,代表序列 。
输出格式
输出⼀个整数,代表满⾜要求的 数量。 3.2.4 样例1 1 5 2 3 2 4 3 2 1 2 3.2.5 样例解释 满⾜条件的 有 和 。 3.2.6 数据范围 子任务编号 数据点占比 1 20% 2 40% 3 40% 对于全部数据,保证有 , 。 3.2.7 参考程序 1 #include<bits/stdc++.h> 2 using namespace std; 3 map<int,int> mp; 4 const int N = 1e5+10; 5 int calc(int x) { 6 int res = 0; 7 for (int i = 2; i * i <= x; i++) { 8 if (x % i == 0) { 9 while (x% i == 0){ 10 x/= i; 11 res^=(1<<(i-1)); 12 } 13 } 14 } 15 if (x != 1) { 16 res^=(1<<(x-1)); 17 } 18 return res; 19 } 20 int a[N]; 21 int main(){ 22 int n; 23 cin>>n; 24 long long ans = 0; 25 int pre = 0; 26 for(int i=1;i<=n;i++){ 27 cin>>a[i]; 28 int res = calc(a[i]); 29 pre^=res; 30 if(pre==0) 31 ans++; 32 ans+=mp[pre]; 33 mp[pre]+=1; 34 35 } 36 cout<<ans<<"\n"; 37 }
样例输入 #1
1 5
2 3 2 4 3 2
1 2
样例输出 #1
样例解释 #1
满⾜条件的 有 和 。
数据范围
子任务编号 数据点占比 1 20% 2 40% 3 40% 对于全部数据,保证有 , 。
知识点与难度
本题涉及的知识点从属于 GESP 7级,难度等级:⭐⭐⭐⭐⭐⭐ 。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 / 特殊性质 |
| 2 | 15 | 9~11 | Hack |
| 3 | 30 | 12~20 | 中大规模 |
| 4 | 25 | 21~25 | 随机回归 |
生测试数据后,按实际 subtask 分组改写上表。