Submission #1214679

#TimeUsernameProblemLanguageResultExecution timeMemory
1214679badge881Zapina (COCI20_zapina)C++20
110 / 110
195 ms3288 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll Mod = 1e9 + 7; ll fx(ll a, ll b) { return (a + b) % Mod; } ll mx(ll a, ll b) { return (a * b) % Mod; } ll binpow(ll a, ll b) { if (b == 0) return 1ll; ll s = binpow(a, b / 2); if (b % 2) return mx(mx(s, s), a); return mx(s, s); } ll dp[351][351][2]; ll fact[351], binnom[351][351]; ll calc(ll n, ll k) { if (k == 0) return 1; return mx(fact[n], binpow(mx(fact[n - k], fact[k]), Mod - 2)); } int main() { int n; scanf("%d", &n); fact[0] = fact[1] = 1; for (ll i = 2; i <= n; i++) fact[i] = mx(fact[i - 1], i); for (ll i = 0; i <= n; i++) for (ll j = 0; j <= i; j++) binnom[i][j] = calc(i, j); dp[0][n][0] = 1; for (int i = 0; i < n; i++) for (int j = 0; j <= n; j++) for (int f = 0; f <= 1; f++) { for (int u = 0; u <= j; u++) { if (u == i + 1) dp[i + 1][j - u][1] = fx(dp[i + 1][j - u][1], mx(binnom[j][u], dp[i][j][f])); else dp[i + 1][j - u][f] = fx(dp[i + 1][j - u][f], mx(binnom[j][u], dp[i][j][f])); } } printf("%lld\n", dp[n][0][1]); }

Compilation message (stderr)

zapina.cpp: In function 'int main()':
zapina.cpp:40:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...