# MathBuzz MAT SOLUTION

Page Contents

## MathBuzz MAT

There is an inter-city math competition among k various prestigious top schools in the city. Some subset of schools will be selected to compete, where the i-th school is selected with probability pi(mod998 244 353). The schools are all selected independently from each other. It’s even possible that the number of selected schools will be 0 or 1, because the contest organizers are not very good mathematicians themselves.

Once the schools have been selected, each selected school must choose r of its students to form a team. The i-th school has ai students in total it can choose from. Given a selection of the schools, you are interested in the number of ways teams can be formed. Two ways are considered different if there is at least one school that chose different sets of students for its team.

If the subset of schools is chosen according to the above process, find the expected number of ways they can form teams.

Input
The first line contains an integer r.
The second line contains an integer k.
The third line contains k integers a1,…,ak.
The fourth line contains k integers p1,…,pk.
Output
Output the expected number of ways to form teams, modulo 998244353.

Constraints
1≤ai≤109
1≤k≤2⋅105
1≤r≤105
1≤pi<998 244 353
Subtasks
Subtask 1 (10 points): r≤100
Subtask 2 (90 points): Original constraints.

Sample Input
1
2
2 2
1 1
Sample Output
4

Program:

``````import java.util.* ;
import java.io.* ;
class CodeChef {

public static void main(String[] args) {

InputStream inputStream = System.in;
Scanner sc = new Scanner(System.in) ;
InputReader in = new InputReader(inputStream);
try{
// int t= in.nextInt();
//while(t-->0) {
long r = in.nextLong();
int k = in.nextInt();
long arr[] = new long[k] ;
long p[] = new long[k] ;
for(int i = 0 ; i < k ; i++)
arr[i] = in.nextLong() ;
for(int i = 0 ; i < k ; i++)
p[i] = in.nextLong() ;

long ans = 0;

for(int i = 0 ; i < k ; i++)
{
long lol = 0 ;
long tem = r ;
long tem1 = arr[i] ;
long num =1 ;
long den = 1;
while(tem>0)
{
num *= tem1 ;
tem1--;
den *= tem ;
tem--;

}
lol = (long) (num/den) ;
ans += lol*p[i] ;
}
System.out.println(ans) ;

//}
}
catch(Exception e)
{

}

}
}

class InputReader {
public BufferedReader reader;
public StringTokenizer tokenizer;

public InputReader(InputStream stream) {
reader = new BufferedReader(new InputStreamReader(stream), 32768);
tokenizer = null;
}

public String next() {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(reader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}

public int nextInt() {
return Integer.parseInt(next());
}
public String nextLine()
{
return (String)next() ;
}
public long nextLong(){return Long.parseLong(next());}
public double nextDouble(){return Double.parseDouble(next());}
}``````