제출 #481357

#제출 시각아이디문제언어결과실행 시간메모리
481357DJeniUpPlus Minus (BOI17_plusminus)C++17
100 / 100
366 ms29688 KiB
//#pragma GCC Optimize("O3")
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll>pairll;
typedef pair<ll,pairll>pairlll;
typedef pair<pairll,pairll>pairllll;
typedef long double ld;
typedef pair<ll,string>pairls;

#define INF 1000000000000007
#define MOD 1000000007
#define pb push_back
#define fr first
#define sc second
#define endl '\n'

ll n,m,k,X,Y;

struct D{
    ll a,b,h;
}d[100007];

map<ll,ll>f1,g1,f2,g2;

ll S(ll x,ll y){
    ll res=1;
    while(y>0){
        if(y%2==1){
            res*=x;
            res%=MOD;
        }
        x*=x;
        x%=MOD;
        y/=2;
    }
    return res;
}

int main() {
    
    cin>>n>>m>>k;
    ll N=n;
    ll M=m;
    if(k==0){
        cout<<(S(2,n)+S(2,m)-2)%MOD;
        return 0;
    }
    for(int i=1;i<=k;i++){
        char c;
        cin>>c>>d[i].a>>d[i].b;
        if(c=='+')d[i].h=1;
        else d[i].h=0;
    }
    for(int i=1;i<=k;i++){
        if(f1[d[i].a]==0){
            f1[d[i].a]=1;
            g1[d[i].a]=(d[i].b+d[i].h)%2;
            n--;
        }else{
            if(g1[d[i].a]!=(d[i].b+d[i].h)%2){
                X=1;
            }
        }

        if(f2[d[i].b]==0){
            f2[d[i].b]=1;
            g2[d[i].b]=(d[i].a+d[i].h)%2;
            m--;
        }else{
            if(g2[d[i].b]!=(d[i].a+d[i].h)%2){
                Y=1;
            }
        }
    }
    if(N==1){
        cout<<S(2,m)<<endl;
    }else if(M==1){
        cout<<S(2,n)<<endl;
    }else if(X==1 && Y==1){
        cout<<0<<endl;
    }else if(X==0 && Y==1){
        cout<<S(2,n)<<endl;
    }else if(X==1 && Y==0){
        cout<<S(2,m)<<endl;
    }else{
        cout<<(S(2,n)+S(2,m)-1)%MOD<<endl;
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...