数据范围有误

P4111 [HEOI2015] 小 Z 的房间

我开N=10就过了呀 ```cpp #include <iostream> #include <sstream> #include <iomanip> #include <algorithm> #include <set> #include <map> #include <queue> #include <stack> #include <vector> #include <string> #include <cstring> #include <cmath> #include <cstdio> #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second #define test cerr << '!' << endl; using namespace std; typedef long long ll; typedef unsigned long long ull; int main0 (); int main () { #ifndef ONLINE_JUDGE freopen("C:\\Users\\98497\\Desktop\\code\\file.in", "r", stdin); #endif ios::sync_with_stdio(false); // clock_t start,end; // start = clock(); main0(); // end = clock(); // cout << (end - start) << endl; #ifndef ONLINE_JUDGE fclose(stdin); #endif return 0; } const int INF = 0x3f3f3f3f; const int N = 10; const int M = 100; const int mod = 1e9; char c[N][N]; int id[N][N]; ll f[M][M]; void add (int u, int v) { f[u][u]++; f[v][v]++; f[u][v]--; f[v][u]--; } int main0 () { int n, m, cnt = 0; cin >> n >> m; for (int i = 1;i <= n;i++) { for (int j = 1;j <= m;j++) { cin >> c[i][j]; if (c[i][j] == '.') id[i][j] = ++cnt; } } memset(f, 0, sizeof f); for (int i = 1;i <= n - 1;i++) for (int j = 1;j <= m;j++) if ((c[i][j] == '.') && (c[i + 1][j] == '.')) add(id[i][j], id[i + 1][j]); for (int j = 1;j <= m - 1;j++) for (int i = 1;i <= n;i++) if ((c[i][j] == '.') && (c[i][j + 1] == '.')) add(id[i][j], id[i][j + 1]); // for (int i = 1;i <= cnt;i++) { // for (int j = 1;j <= cnt;j++) cout << f[i][j] << ' '; // cout << endl; // } ll ans = 1; for (int i = 1;i < cnt;i++) { for (int j = i + 1;j < cnt;j++) { while (f[j][i]) { ll t = f[i][i] / f[j][i]; for (int k = i;k < cnt;k++) f[i][k] = (f[i][k] - t * f[j][k] + mod) % mod; swap(f[i], f[j]); ans *= -1; } } ans *= f[i][i]; ans %= mod; } ans += mod; ans %= mod; cout << ans << endl; }
by Nanarikom @ 2019-10-19 23:53:42


点数是$O(nm)$的,所以矩阵数组应该开$100\times100$。。。
by kkksx @ 2019-12-13 20:39:16


|