Challenge: Emma and sum of products
Subdomeniu: Algebra (algebra)
Scor cont: 80.0 / 80
Submission status: Accepted
Submission score: 1.0
Submission ID: 464735108
Limbaj: cpp14
Link challenge: https://www.hackerrank.com/challenges/emma-and-sum-of-products/problem
Cerinta
Emma is really fond of integers and loves playing with them. Her friends were jealous, and to test her, one of them gave her a problem.
Emma is given a list $A$ of $N$ integers and is asked a set of $Q$ queries. Each query is denoted by an integer $K$, for which you have to return the sum of product of all possible sublists having exactly $K$ elements.
Emma has got stuck in this problem and you being her best friend have decided to help her write a code to solve it. Since the answers can be very large, print the answers modulo $100003$.
**Input Format**
First line has an integer $N$, denoting the number of integers in list $A$. Next line contains $N$ space separated integers. The third line contains integer $Q$, and next $Q$ lines have a single integer $K$.
**Output Format**
For each of the queries, print the corresponding answer in a new line.
**NOTE** Sublist here refers to selecting $K$ elements from a list of $N$ elements. There will be $N \choose K$ ways to do that, it doesn't matter if two elements are same.
**Constraints**
$1 \le N \le 3\times10^4$
$1 \le A_i \le 10^5$
$1 \le Q \le N$
$1 \le K \le N$
**Sample Input #00**
3
1 2 3
2
1
2
**Sample Output #00**
6
11
**Sample Input #01**
3
1 2 2
1
2
**Sample Output #01**
8
**Explanation**
Sample #00:
For $K=1$ possible sublists are $\{1\},\{2\},\{3\}$ so answer is $1+2+3 = 6$.
For $K=2$ possible sublists are $\{1,2\},\{2,3\},\{3,1\}$ so answer is $(1\times2) + (2\times3) + (3\times1) = 2+6+3 = 11$.
Sample #01:
For $K=2$ possible sublists are $\{1,2\},\{2,2\},\{2,1\}$ so answer is $(1\times 2) + (2\times2) + (2\times 1) = 2+4+2 = 8$.
Cod sursa
//emma-and-sum-of-products.cpp
//Emma and sum of products
//Ad Infinitum - Math Programming Contest August'14
//Author: derekhh
#include<iostream>
#include<cstring>
using namespace std;
const int MOD = 100003;
int a[30001], n;
int f[30001], g[30001];
void foo()
{
f[0] = 1; f[1] = a[1];
for (int i = 2; i <= n;i++)
{
g[0] = 1;
for (int j = 1; j <= i; j++)
g[j] = (f[j] + (long long)f[j - 1] * a[i]) % MOD;
memcpy(f, g, sizeof(g));
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
foo();
int q;
cin >> q;
while (q--)
{
int k;
cin >> k;
cout << f[k] << endl;
}
return 0;
}
HackerRank Algebra – Emma and sum of products
