#4850
O matrice cu n linii şi m coloane se completează aleatoriu cu numerele \( 2^{1}, 2^{2},…, 2^{n\cdot m}\), fiecare număr fiind folosit o singură dată. Matricea se numeşte perfecta dacă produsul elementelor pe fiecare linie şi fiecare coloană este pătrat perfect. Să se afle câte matrice perfecte se pot forma.
***
| Problema | Perfecta | Operații I/O |
perfecta.in/perfecta.out
|
|---|---|---|---|
| Limita timp | 0.75 secunde | Limita memorie |
Total: 256 MB
/
Stivă 8 MB
|
| Id soluție | #60596397 | Utilizator | |
| Fișier | perfecta.cpp | Dimensiune | 1.54 KB |
| Data încărcării | 05 Noiembrie 2025, 20:22 | Scor/rezultat | Eroare de compilare |
perfecta.cpp:1:26: warning: extra tokens at end of #include directive [enabled by default] #include <bits/stdc++.h> using namespace std; const int MOD = 1000000007; int n, m, total; vector<int> fact; vector<vector<int>> C; int mul(int a, int b) { return (int)((1LL * a * b) % MOD); } void computeFactorials(int limit) { fact.resize(limit + 1); fact[0] = 1; for (int i = 1; i <= limit; ++i) fact[i] = mul(fact[i - 1], i); } void computeCombinations(int N) { C.assign(N + 1, vector<int>(N + 1, 0)); for (int i = 0; i <= N; ++i) { C[i][0] = 1; for (int j = 1; j <= i; ++j) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); freopen("perfecta.in", "r", stdin); freopen("perfecta.out", "w", stdout); cin >> n >> m; total = n * m; computeFactorials(total); computeCombinations(n); vector<vector<vector<int>>> dp(2, vector<vector<int>>(total + 1, vector<int>(n + 1, 0))); dp[0][0][0] = 1; for (int col = 0; col < m; ++col) { int cur = col % 2; int nxt = 1 - cur; for (int j = 0; j <= total; ++j) fill(dp[nxt][j].begin(), dp[nxt][j].end(), 0); for (int j = 0; j <= total; ++j) { for (int k = 0; k <= n; ++k) { int val = dp[cur][j][k]; if (val == 0) continue; for (int u = 0; u <= n; u += 2) { for (int h = 0; h <= min(k, u); ++h) { if (h > k || (u - h) > (n - k)) continue; int nk = k - h + (u - h); int nj = j + u; if (nj > total) continue; int ways = mul(C[k][h], C[n - k][u - h]); dp[nxt][nj][nk] = (dp[nxt][nj][nk] + mul(val, ways)) % MOD; } } } } } int half = (total + 1) / 2; int sol = dp[m % 2][half][0]; sol = mul(sol, fact[half]); sol = mul(sol, fact[total - half]); cout << sol << "\n"; return 0; } ^ /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 13 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 21 has invalid symbol index 22 /usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2 /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o: In function \`_start': (.text+0x18): undefined reference to \`main' collect2: error: ld returned 1 exit status
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Perfecta face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.