이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
using namespace std;
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define trav(a, x) for(auto& a : x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<ll, ll> pii;
typedef vector<ll> vi;
typedef vector<pii> vpi;
int rd() {
int result = 0;
char ch;
ch = getchar();
while(ch < '0' || ch > '9') ch = getchar();
result = ch-'0';
while (true) {
ch = getchar();
if (ch < '0' || ch > '9') break;
result = result*10 + (ch - '0');
}
return result;
}
template<class T> bool ckmin(T& a, const T& b) { return a > b ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
void usaco(string s){
freopen((s+".in").c_str(), "r", stdin);
freopen((s+".out").c_str(), "w", stdout);
}
int a[102];
ll dp[102][102][1002][3];
int main() {
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
#ifdef LOCAL_DEFINE
freopen("input.txt", "r", stdin);
#endif
const ll mod = 1e9+7;
int n, l; cin>>n>>l;
rep(i, 1, n+1) cin >> a[i];
sort(a+1, a+n+1);
a[n+1] = 10000;
dp[0][0][0][0] = 1;
if(n == 1) return cout << 1, 0;
rep(i,1,n+1)
rep(j,1,i+1)
rep(k,0,l+1)
rep(m,0,3){
int cd =(2*j-m)*(a[i+1]-a[i]); if(cd>k or i+j+1-m>n) continue;
dp[i][j][k][m] += dp[i-1][j-1][k-cd][m];
dp[i][j][k][m] +=(2 * j - m) * dp[i - 1][j][k - cd][m];
if(m) dp[i][j][k][m] +=(3 - m) * dp[i - 1][j - 1][k - cd][m - 1];
if(m == 1) dp[i][j][k][m] += 2 * j * dp[i - 1][j][k - cd][m - 1];
if(m == 2){
if(i == n) dp[i][j][k][m] += dp[i - 1][j][k - cd][m - 1];
else if(j > 1) dp[i][j][k][m] +=(j - 1) * dp[i - 1][j][k - cd][m - 1];
}
if(m == 2) {
if(i == n) dp[i][j][k][m] += dp[i - 1][j + 1][k - cd][m];
else dp[i][j][k][m] += j *(j - 1) * dp[i - 1][j + 1][k - cd][m];
}
else if(m == 1) dp[i][j][k][m] += j * j * dp[i - 1][j + 1][k - cd][m];
else dp[i][j][k][m] += j *(j + 1) * dp[i - 1][j + 1][k - cd][m];
dp[i][j][k][m] %= mod;
}
ll ans = 0;
for(int i = 0; i <= l; i++) ans += dp[n][1][i][2];
cout << ans % mod;
}
컴파일 시 표준 에러 (stderr) 메시지
skyscraper.cpp: In function 'void usaco(std::string)':
skyscraper.cpp:30:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
30 | freopen((s+".in").c_str(), "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skyscraper.cpp:31:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
31 | freopen((s+".out").c_str(), "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |