#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
cin.tie(0)->sync_with_stdio(0);
int x,y,n;
cin>>x>>y>>n;
struct symbol{
char c;
int a,b;
};
vector<int> ok(2,1);
vector<symbol> vs(n);
for(int i = 0; i < n;i++) {
cin>>vs[i].c>>vs[i].a>>vs[i].b;
if(vs[i].c=='+')
{
if((vs[i].a + vs[i].b)%2 == 0)
ok[0] = 0;
else
ok[1] = 0;
} else {
if((vs[i].a + vs[i].b) %2 == 0)
ok[1] = 0;
else
ok[0] = 0;
}
}
map<int,vector<int>> rowvi,colvi;
for(int i = 0; i < n;i++) {
rowvi[vs[i].a] = vector<int>(2,1);
colvi[vs[i].b] = vector<int>(2,1);
}
for(int i = 0; i < n; i++) {
if(vs[i].c=='+') {
if(vs[i].b % 2 == 0)
rowvi[vs[i].a][1] = 0;
else
rowvi[vs[i].a][0] = 0;
if(vs[i].a % 2 == 0)
colvi[vs[i].b][0] = 0;
else
colvi[vs[i].b][1] = 0;
} else {
if(vs[i].b % 2 == 0)
rowvi[vs[i].a][0] = 0;
else
rowvi[vs[i].a][1] = 0;
if(vs[i].a % 2 == 0)
colvi[vs[i].b][1] = 0;
else
colvi[vs[i].b][0] = 0;
}
}
const int mod = 1e9+7;
function<int(int, int)> logpow = [&](int a, int b) {
if(b==0)
return 1ll;
int x = logpow(a,b/2);
if(b%2==1)
return x*x % mod * a % mod;
return x * x % mod;
};
int cur = mod-accumulate(ok.begin(),ok.end(),0);
cur %= mod;
int num = logpow(2, x);
// cout<<num<<'\n';
for(auto a: rowvi) {
// cout<<a.first<<" ";
// for(auto b:a.second)
// cout<<b;
// cout<<"\n";
int x = accumulate(a.second.begin(),a.second.end(),0);
if(x==1)
num *= logpow(2,mod-2);
else if(x==0)
num =0;
num %= mod;
}
// cout<<num<<'\n';
cur += num;
cur %= mod;
num = logpow(2,y);
// cout<<num<<'\n';
for(auto a:colvi) {
// cout<<a.first<<" ";
// for(auto b:a.second)
// cout<<b;
// cout<<"\n";
int x = accumulate(a.second.begin(),a.second.end(),0);
if(x==1)
num *= logpow(2,mod - 2);
else if(x==0)
num = 0;
num %= mod;
}
// cout<<num<<'\n';
cur += num;
cur %= mod;
cout<<cur<<"\n";
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
344 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
344 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
344 KB |
Output is correct |
11 |
Correct |
1 ms |
604 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
1 ms |
600 KB |
Output is correct |
15 |
Correct |
1 ms |
604 KB |
Output is correct |
16 |
Correct |
38 ms |
3932 KB |
Output is correct |
17 |
Correct |
40 ms |
3932 KB |
Output is correct |
18 |
Correct |
37 ms |
3832 KB |
Output is correct |
19 |
Correct |
40 ms |
3932 KB |
Output is correct |
20 |
Correct |
39 ms |
3932 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
344 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
344 KB |
Output is correct |
11 |
Correct |
1 ms |
604 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
1 ms |
600 KB |
Output is correct |
15 |
Correct |
1 ms |
604 KB |
Output is correct |
16 |
Correct |
38 ms |
3932 KB |
Output is correct |
17 |
Correct |
40 ms |
3932 KB |
Output is correct |
18 |
Correct |
37 ms |
3832 KB |
Output is correct |
19 |
Correct |
40 ms |
3932 KB |
Output is correct |
20 |
Correct |
39 ms |
3932 KB |
Output is correct |
21 |
Correct |
173 ms |
17156 KB |
Output is correct |
22 |
Correct |
0 ms |
344 KB |
Output is correct |
23 |
Correct |
158 ms |
17200 KB |
Output is correct |
24 |
Correct |
150 ms |
17092 KB |
Output is correct |
25 |
Correct |
152 ms |
17232 KB |
Output is correct |
26 |
Correct |
174 ms |
22396 KB |
Output is correct |
27 |
Correct |
173 ms |
22352 KB |
Output is correct |
28 |
Correct |
176 ms |
22248 KB |
Output is correct |
29 |
Correct |
197 ms |
22364 KB |
Output is correct |
30 |
Correct |
217 ms |
26824 KB |
Output is correct |