#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
string to_string(pair<A, B> p);
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p);
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p);
string to_string(const string& s) {
return '"' + s + '"';
}
string to_string(const char* s) {
return to_string((string) s);
}
string to_string(bool b) {
return (b ? "true" : "false");
}
string to_string(vector<bool> v) {
bool first = true;
string res = "{";
for (int i = 0; i < static_cast<int>(v.size()); i++) {
if (!first) {
res += ", ";
}
first = false;
res += to_string(v[i]);
}
res += "}";
return res;
}
template <size_t N>
string to_string(bitset<N> v) {
string res = "";
for (size_t i = 0; i < N; i++) {
res += static_cast<char>('0' + v[i]);
}
return res;
}
template <typename A>
string to_string(A v) {
bool first = true;
string res = "{";
for (const auto &x : v) {
if (!first) {
res += ", ";
}
first = false;
res += to_string(x);
}
res += "}";
return res;
}
template <typename A, typename B>
string to_string(pair<A, B> p) {
return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <typename A, typename B, typename C>
string to_string(tuple<A, B, C> p) {
return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ")";
}
template <typename A, typename B, typename C, typename D>
string to_string(tuple<A, B, C, D> p) {
return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";
}
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
cerr << " " << to_string(H);
debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
#define fi first
#define se second
#define pb push_back
#define mod(n,k) ( ( ((n) % (k)) + (k) ) % (k))
#define forn(i,a,b) for(int i = a; i < b; i++)
#define forr(i,a,b) for(int i = a; i >= b; i--)
#define all(x) (x).begin(), (x).end()
typedef long long ll;
typedef long double ld;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
const ll mod = 1e9+7;
int sum(int a, int b){return (a+b) % mod;}
int sub(int a, int b){return (a + mod - b) % mod;}
int mul(int a, int b){return (1ll * a * b) % mod;}
int power(int a,int b){
int res = 1;
while(b){
if(b&1)res = mul(res,a);
b >>= 1;
a = mul(a,a);
}
return res;
}
const int maxn = 102;
const int maxc = 1002;
int A[maxn],memo[maxn][maxc][2][maxn][2],N,L;
int dp(int pos,int cost,int l,int m,int r){
int newCost = cost;
if(pos)newCost += (l+2*m+r)*(A[pos]-A[pos-1]);
if(newCost > L)return 0;
if(pos == N-1)return (m == 0);
int &res = memo[pos][cost][l][m][r];
if(res != -1)return res;
res = 0;
res = sum(res,dp(pos+1,newCost,1,m,r));
if(m)res = sum(res,mul(m,dp(pos+1,newCost,1,m-1,r)));
res = sum(res,dp(pos+1,newCost,l,m,1));
if(m)res = sum(res,mul(m,dp(pos+1,newCost,l,m-1,1)));
res = sum(res,dp(pos+1,newCost,l,m+1,r));
if(m >= 1)res = sum(res,mul(2*m,dp(pos+1,newCost,l,m,r)));
if(m >= 2)res = sum(res,mul(m*(m-1),dp(pos+1,newCost,l,m-1,r)));
return res;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
forn(i,0,maxn)forn(j,0,maxc)forn(k,0,2)forn(l,0,maxn)forn(m,0,2)memo[i][j][k][l][m] = -1;
cin >> N >> L;
forn(i,0,N)cin >> A[i];
sort(A,A+N);
int res = dp(0,0,0,0,0);
cout << res << '\n';
return 0;
}
/*
__builtin_mul_overflow(x,y,&x)
-fsplit-stack
*/
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
94 ms |
163564 KB |
Output is correct |
2 |
Correct |
93 ms |
163564 KB |
Output is correct |
3 |
Correct |
94 ms |
163564 KB |
Output is correct |
4 |
Correct |
104 ms |
163532 KB |
Output is correct |
5 |
Correct |
93 ms |
163564 KB |
Output is correct |
6 |
Correct |
95 ms |
163564 KB |
Output is correct |
7 |
Correct |
93 ms |
163564 KB |
Output is correct |
8 |
Correct |
95 ms |
163488 KB |
Output is correct |
9 |
Correct |
95 ms |
163564 KB |
Output is correct |
10 |
Correct |
93 ms |
163564 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
94 ms |
163472 KB |
Output is correct |
2 |
Correct |
96 ms |
163564 KB |
Output is correct |
3 |
Correct |
93 ms |
163564 KB |
Output is correct |
4 |
Correct |
94 ms |
163548 KB |
Output is correct |
5 |
Correct |
96 ms |
163564 KB |
Output is correct |
6 |
Correct |
94 ms |
163692 KB |
Output is correct |
7 |
Correct |
94 ms |
163564 KB |
Output is correct |
8 |
Correct |
93 ms |
163596 KB |
Output is correct |
9 |
Correct |
96 ms |
163564 KB |
Output is correct |
10 |
Correct |
98 ms |
163564 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
94 ms |
163564 KB |
Output is correct |
2 |
Correct |
93 ms |
163564 KB |
Output is correct |
3 |
Correct |
94 ms |
163564 KB |
Output is correct |
4 |
Correct |
104 ms |
163532 KB |
Output is correct |
5 |
Correct |
93 ms |
163564 KB |
Output is correct |
6 |
Correct |
95 ms |
163564 KB |
Output is correct |
7 |
Correct |
93 ms |
163564 KB |
Output is correct |
8 |
Correct |
95 ms |
163488 KB |
Output is correct |
9 |
Correct |
95 ms |
163564 KB |
Output is correct |
10 |
Correct |
93 ms |
163564 KB |
Output is correct |
11 |
Correct |
94 ms |
163472 KB |
Output is correct |
12 |
Correct |
96 ms |
163564 KB |
Output is correct |
13 |
Correct |
93 ms |
163564 KB |
Output is correct |
14 |
Correct |
94 ms |
163548 KB |
Output is correct |
15 |
Correct |
96 ms |
163564 KB |
Output is correct |
16 |
Correct |
94 ms |
163692 KB |
Output is correct |
17 |
Correct |
94 ms |
163564 KB |
Output is correct |
18 |
Correct |
93 ms |
163596 KB |
Output is correct |
19 |
Correct |
96 ms |
163564 KB |
Output is correct |
20 |
Correct |
98 ms |
163564 KB |
Output is correct |
21 |
Correct |
94 ms |
163564 KB |
Output is correct |
22 |
Correct |
398 ms |
163692 KB |
Output is correct |
23 |
Correct |
157 ms |
163564 KB |
Output is correct |
24 |
Correct |
195 ms |
163652 KB |
Output is correct |
25 |
Correct |
170 ms |
163564 KB |
Output is correct |
26 |
Correct |
167 ms |
163808 KB |
Output is correct |
27 |
Correct |
160 ms |
163692 KB |
Output is correct |
28 |
Correct |
172 ms |
163668 KB |
Output is correct |
29 |
Correct |
282 ms |
163524 KB |
Output is correct |
30 |
Correct |
167 ms |
163564 KB |
Output is correct |