PKU : 2160 - Box

問題概要

http://poj.org/problem?id=2160

長方形の紙が6枚与えられます.
これらを使って, 直方体を作れるか答えなさい.

アルゴリズム

同じ形の紙は, それぞれ2の倍数個ないといけない.
さらに, 同じ長さの辺は, それぞれ4の倍数個入力されなければならない.
この条件のもと実装.

プログラム

typedef pair<int,int> P;

int main(void){
  map<P,int> cnt;
  map<int,int> valCnt;

  rep(i,6){
    int w,h;
    scanf("%d%d",&w,&h);
    if(w > h) swap(w,h);
    cnt[P(w,h)]++;
    valCnt[w]++;
    valCnt[h]++;
  }

  bool ans = true;
  foreach(i,cnt){
    if((i->second) % 2 != 0){
      ans = false;
    }
  }
  foreach(i,valCnt){
    if((i->second) % 4 != 0){
      ans = false;
    }
  }

  printf("%s\n",ans ? "POSSIBLE" : "IMPOSSIBLE");
}