빈칸을 일정 사이사이에 넣는 경우의 수는 중복 조합으로 구할 수 있다
일정 사이 개수: n+1 (일정 +1)
빈칸 개수: k - sum, rest라고 표현하겠음
일정의 경우의 수: n!
빈칸 경우의 수 * 일정 경우의 수 곱하면 된다.
수식은 위 사진과 같이 정리할 수 있음.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include<cassert>
#include <climits>
#include <tuple>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321
#define FOR(i, n) for(int i = 0; i < (n); ++i)
using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;
int main() {
i64 n, k;
scanf("%lld %lld", &n, &k);
i64 sum = 0;
for (int i = 0; i < n; i++) {
i64 x;
scanf("%lld", &x);
sum += x;
}
i64 rest = k - sum;
i64 ans = 1;
for (i64 i = 1; i <= n; i++) {
ans = (i + rest) * ans % 1000000007;
}
printf("%lld\n", ans);
return 0;
}
'백준' 카테고리의 다른 글
16166 서울의 지하철 (1) | 2024.04.27 |
---|---|
23074 자연수 색칠하기 2 (0) | 2024.04.13 |
23562 ㄷ 만들기 (1) | 2023.11.04 |
26595 전투의 신 (1) | 2023.10.07 |
18248 제야의 종 (1) | 2023.10.07 |