| 比赛 | 
    20251022赛前模拟1 | 
    评测结果 | 
    AAAAAAAAAAAAAAAAAAAA | 
    | 题目名称 | 
    正负游戏 | 
    最终得分 | 
    100 | 
    | 用户昵称 | 
    淮淮清子 | 
    运行时间 | 
    0.105 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    4.59 MiB  | 
    | 提交时间 | 
    2025-10-22 09:20:54 | 
显示代码纯文本
#include<iostream>
#include<vector>
using namespace std;
const int MOD = 998244353;
const int MAXN = 1e6 + 5;
long long pow2(long long e){
    long long res = 1, a = 2;
    while(e){
        if (e & 1) res = res * a % MOD;
        a = a * a % MOD;
        e >>= 1;
    }
    return res;
}
int n, m, k;
int rcnt[MAXN], r[MAXN];
int ccnt[MAXN], c[MAXN];
int main(){
    freopen("plusminus.in", "r", stdin);
    freopen("plusminus.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
    cin >> n >> m >> k;
    if((n % 2) != (m % 2)){
    	cout << 0 << '\n';
    	return 0;
	}
    if(n == 1 || m == 1){
        int s = (n == 1) ? m : n;
        int cnt = 1;
        for(int i = 0;i < k;i ++){
            int x, y, z; cin >> x >> y >> z;
            cnt *= z;
        }
        int rem = s - k;
        if(rem == 0){
            cout << (cnt == -1 ? 1 : 0) << '\n';
        }
		else{
            cout << pow2(rem - 1) << '\n';
        }
    }
	else{
		for(int i = 1;i <= n;i ++){
			rcnt[i] = 1, r[i] = 0;
		}
		for(int j = 1;j <= m;j ++){
			ccnt[j] = 1, c[j] = 0;
		}
        for(int i = 0;i < k;i ++){
            int x, y, z; cin >> x >> y >> z;
            rcnt[x] *= z; r[x] ++;
            ccnt[y] *= z; c[y] ++;
        }
        bool flag = true;
        for(int i = 1;i <= n && flag;i ++){
            if(r[i] == m && rcnt[i] != -1){
            	flag = false;
			}
        }
        for(int j = 1;j <= m && flag;j ++){
            if(c[j] == n && ccnt[j] != -1){
            	flag = false;
			}
        }
        if(!flag){
            cout << 0 << '\n';
        }
		else{
            long long res = 1LL * (n - 1) * (m - 1) - k;
            cout << ((res >= 0) ? pow2(res) : 0) << '\n';
        }
    }
    return 0;
}