牛客 114514
给你一个长为n的序列
定义一个序列下标的子集为先辈,当且仅当选出的这些下标对应的序列值的乘积为114514,而且因为只有一只野兽,所以有个要求是选出来的这些下标所对应的序列值最多有一个1
请输出有多少先辈
Input
来源:牛客网
第一行一个数表示n
之后一行n个数表示这个序列
n <= 229028,序列的值域在[0,1145141919]中
Output
输出一行一个数表示答
Examples
输入
复制
2
1 114514
输出
复制
2
题解:
题意有点迷, 其实就是求能凑成114514的所有方案的数数量之和
质因数分解一下 114514 = 2311847, map存一下即可.
#include<bits/stdc++.h>
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef unsigned long long LL;
const int inf = 1 << 30;
const int maxn = 229028+10;
LL n, a[maxn];
map<LL, LL> ma;
int main() {
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> a[i];
++ma[a[i]];
}
cout << (ma[114514]+ma[2]*ma[31]*ma[1847]+ma[62]*ma[1847]+ma[57257]*ma[2]+ma[3694]*ma[31])*(ma[1]+1);
return 0;
}
//2*31*1847