POJ 2160 BOX

来源:互联网 发布:程序员能做到多少岁 编辑:程序博客网 时间:2024/05/16 04:43
题意:给出六个矩形的长与宽,判定这六个矩形是否可以组成一个长方体。

思路:先假设可以组成长方体,共有三种情况:

情况一:
该长方体的长、宽、高各不相等,从第一个矩形输入的两条边(先左后右)开始扫描(逐个矩形扫描,先和输入的六个矩形左侧的边比较,若相等,则频数自增;若不相等,和该输入矩形右侧的边比较,若相等,则频数自增,每条边的出现频数为4,共有12个4出现;

情况二:
该长方体的长、宽、高中,有两种边是相等的(即,长==宽or长==高or宽==高),按照情况一的方法扫描,共有8个6,4个4出现;

情况三:
该长方体为一个正方体,即长==宽==高,按照情况一的方法扫描,每条边的出现频数为6,共有12个6出现。


代码:

#include
usingnamespacestd;
intmain()
{
   int w[6],h[6],count1[6]={0},count2[6]={0},n1=0,n2=0;
   for(int i=0;i<</span>6;i++)
      cin>>w[i]>>h[i];
   for(int i=0;i<</span>6;i++         //记录输入矩形的每条边出现频数
   {
      for(int j=0;j<</span>6;j++)
      {
         if(w[i]==w[j])count1[i]++;
         elseif(w[i]!=w[j])
             if(w[i]==h[j])count1[i]++;
         if(h[i]==h[j])count2[i]++;
         elseif(h[i]!=h[j])
             if(h[i]==w[j])count2[i]++;
      }
   }
   for(int i=0;i<</span>6;i++         //记录不同频数的个数
   {
      if(count1[i]==6)n1++;
      elseif(count1[i]==4)n2++;
      if(count2[i]==6)n1++;
      elseif(count2[i]==4)n2++;
   }
   if(n1==12||n2==12||n1==8&&n2==4)cout<<"POSSIBLE"<<endl;
   elsecout<<"IMPOSSIBLE"<<endl;
   return0;
}