Submission #1248434

#TimeUsernameProblemLanguageResultExecution timeMemory
1248434wedonttalkanymoreSoccer (JOI17_soccer)C++20
0 / 100
1 ms324 KiB
#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; using ll = long long; const ll mod = 1000000007; inline int modadd(int a, int b) { a += b; return a < mod ? a : a - mod; } inline int modmul(ll a, ll b) { return (int)(a * b % mod); } vector<ll> merge(const vector<ll>& a, const vector<ll>& b, int k) { int na = a.size(), nb = b.size(); int nc = min(k, na + nb - 2) + 1; vector<ll> c(nc); for (int i = 0; i < na; i++) { if (a[i]) { for (int j = 0; j < nb && i + j < nc; j++) { c[i + j] = (c[i + j] + a[i] * b[j]) % mod; } } } return c; } vector<ll> power(vector<ll> a, int e, int k) { vector<ll> r(1, 1); while (e) { if (e & 1) r = merge(r, a, k); a = merge(a, a, k); e >>= 1; } return r; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); if (fopen("zid.in", "r")) { freopen("zid.in", "r", stdin); freopen("zid.out", "w", stdout); } int n, m, k; cin >> n >> m >> k; static int dp[3][5005], odd[3][5005], even[3][5005]; dp[0][0] = 1; for (int i = 1; i <= n; i++) { int cur = i % 3, pre = (i - 1) % 3, pre2 = (i + 1) % 3; for (int j = 0; j <= k; j++) { dp[cur][j] = odd[cur][j] = even[cur][j] = 0; } for (int j = 0; j <= k; j++) { int a = dp[pre][j]; int b = (i >= 2 ? odd[pre2][j] : 0); odd[cur][j] = modadd(a, b); int c = (i >= 2 && j >= 2 ? dp[pre2][j - 2] : 0); int d = (i >= 2 && j >= 2 ? even[pre2][j - 2] : 0); even[cur][j] = modadd(c, d); dp[cur][j] = modadd(odd[cur][j], even[cur][j]); } } vector<ll> f(k + 1); for (int i = 0; i <= k; i++) f[i] = dp[n % 3][i]; vector<ll> res = power(f, m, k); cout << (k < res.size() ? res[k] : 0); return 0; }

Compilation message (stderr)

soccer.cpp: In function 'int main()':
soccer.cpp:47:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |         freopen("zid.in", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
soccer.cpp:48:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |         freopen("zid.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...