Submission #796384

#TimeUsernameProblemLanguageResultExecution timeMemory
796384MadokaMagicaFanPlus Minus (BOI17_plusminus)C++14
0 / 100
1 ms212 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; ll md = 1e9+7; ll pw(int x) { ll a = 1; ll c = 2; while (x) { if (x&1) a = (a * c) % md; c = (c * c) % md; x >>= 1; } return a; } int32_t main(int32_t argc, char *argv[]) { if (argc > 1) freopen(argv[1], "r", stdin); int n, m, k; char c; set<int> cx, cy; cin >> n >> m >> k; vector<array<int, 3>> pn(k); for (int i = 0; i < k; ++i) { cin >> c >> pn[i][1] >> pn[i][2]; --pn[i][1], --pn[i][2]; cy.insert(pn[i][1]); cx.insert(pn[i][2]); pn[i][0] = (c == '+') ? 0 : 1; } int hx, hy; hx = hy = 0; vector<array<int, 3>> sm(k); for (int i = 0; i < k; ++i) { sm[i][0] = pn[i][1]; sm[i][1] = pn[i][2]; sm[i][2] = pn[i][0]; } sort(sm.begin(), sm.end()); for (int i = 1; i < k; ++i) { if (sm[i][0] != sm[i-1][0]) continue; if (((sm[i][1] ^ sm[i][2]) ^ (sm[i-1][1] ^ sm[i-1][2])) & 1) { hx = 1; break; } } for (int i = 0; i < k; ++i) { sm[i][0] = pn[i][2]; sm[i][1] = pn[i][1]; sm[i][2] = pn[i][0]; } sort(sm.begin(), sm.end()); for (int i = 1; i < k; ++i) { if (sm[i][0] != sm[i-1][0]) continue; if (((sm[i][1] ^ sm[i][2]) ^ (sm[i-1][1] ^ sm[i-1][2])) & 1) { hy = 1; break; } } //TODO: test for not possible if (hx and hy) { cout << 0 << endl; return 0; } if (hx == 1) { PRINTX: cout << pw(m - cx.size()) << endl; return 0; } if (hy == 1) { PRINTY: cout << pw(n - cy.size()) << endl; return 0; } ll ans = (pw(m - cx.size()) * pw(n - cy.size())) % md; for (int i = 1; i < k; ++i) { if (((pn[i][0] ^ pn[i][1] ^ pn[i][2]) ^ (pn[0][0] ^ pn[0][1] ^ pn[0][2])) & 1) { ans = (ans + md - 1ll) % md; } } cout << ans << endl; }

Compilation message (stderr)

plusminus.cpp: In function 'int32_t main(int32_t, char**)':
plusminus.cpp:86:1: warning: label 'PRINTX' defined but not used [-Wunused-label]
   86 | PRINTX:
      | ^~~~~~
plusminus.cpp:92:1: warning: label 'PRINTY' defined but not used [-Wunused-label]
   92 | PRINTY:
      | ^~~~~~
plusminus.cpp:24:23: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |  if (argc > 1) freopen(argv[1], "r", stdin);
      |                ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...