제출 #981117

#제출 시각아이디문제언어결과실행 시간메모리
981117ShaShiPlus Minus (BOI17_plusminus)C++17
100 / 100
114 ms16512 KiB
#include <bits/stdc++.h> #define int long long #define pii pair<int, int> #define all(x) x.begin(), x.end() #define pb push_back #define mp make_pair #define F first #define S second #define kill(x) cout << x << endl, exit(0); #define endl "\n" using namespace std; typedef long long ll; typedef long double ld; const int MAXN = (int)1e6 + 7; const int MOD = (int)1e9 + 7; const ll INF = (ll)1e18 + 7; int n, m, q, tmp, tmp2, tmp3, tmp4, ans, k, u, v, w, flag, N, M; int arr[MAXN]; vector<int> Rcmp, Ccmp; map<int, int> R, C; char ch; int POW(int x, int y) { if (!y) return 1; if (y&1) return x*POW(x*x%MOD, y/2)%MOD; return POW(x*x%MOD, y/2); } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> q; N = M = 1; tmp3 = tmp2 = 1; while (q--) { cin >> ch >> u >> v; Rcmp.pb(u); Ccmp.pb(v); tmp = (ch == '+'? 1 : 0)+u+v; tmp = (tmp%2); if (tmp == 0) tmp2 = 0; else tmp3 = 0; tmp += 1; if (R[u] == 0) R[u] = tmp; else if (R[u] != tmp) N = 0; if (C[v] == 0) C[v] = tmp; else if (C[v] != tmp) M = 0; } sort(all(Rcmp)); Rcmp.resize(unique(all(Rcmp))-Rcmp.begin()); sort(all(Ccmp)); Ccmp.resize(unique(all(Ccmp))-Ccmp.begin()); // cout << "!" << N << " " << M << endl; ans = (POW(2, n-Rcmp.size())*N + POW(2, m-Ccmp.size())*M - (tmp2+tmp3) + MOD)%MOD; cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...