题解 UVA1587 【盒子 Box】

· · 题解

调了快一个小时,所以一定要发题解!

刚看见题目的时候,感觉就是入门难度,然后WA了两次...

#include<bits/stdc++.h>//万能头文件
using namespace std;
int main()
{
    int w[10],h[10];
    while(cin>>w[1]>>h[1]>>w[2]>>h[2]>>w[3]>>h[3]>>w[4]>>h[4]>>w[5]>>h[5]>>w[6]>>h[6])//输入12个值
    {
        int map[10001]={0};
        for(int i=1;i<=6;i++)
        {
            map[w[i]]++;
            map[h[i]]++;
        }
        int sum=0;
        for(int i=1;i<=10000;i++)
        {
            if(map[i]!=0)
            sum++;
        }
        if(sum>3)//统计出现几个数,如果出现4个及以上就IMPOSSIBLE
        {
        //    cout<<sum<<endl;
            cout<<"IMPOSSIBLE"<<endl;
            continue;
        }
        int ans=0;
        int a[10][3]={0};
        a[1][1]=w[1];
        a[1][2]=h[1];
        a[2][1]=w[2];
        a[2][2]=h[2];
        a[3][1]=w[3];
        a[3][2]=h[3];
        a[4][1]=w[4];
        a[4][2]=h[4];
        a[5][1]=w[5];
        a[5][2]=h[5];
        a[6][1]=w[6];
        a[6][2]=h[6];//忘记用循环了QAQ写完才发现
        for(int i=1;i<=5;i++)
        {
            for(int j=i+1;j<=6;j++)
            {

                if( a[i][1]!=0&&a[j][1]!=0&&a[i][2]!=0&&a[j][2]!=0&&(a[i][1]==a[j][1]&&a[i][2]==a[j][2]||a[i][1]==a[j][2]&&a[i][2]==a[j][1]))
                                {
                                a[i][1]=a[j][1]=a[i][2]=a[j][2]=0;
                                ans++;
                                }
            }
        }//这步像开心消消乐一样把长宽相等的消去,记得ans++完也要清零
        if(ans==3)
        cout<<"POSSIBLE"<<endl;//如果消去3次则能组成盒子,否则不能
        else
        cout<<"IMPOSSIBLE"<<endl;
    }
    return 0;
}

求过QAQ