Cube


Cube


Cube

这道题比赛时想的是只要求出各个边的边长,判断相等边长数大于等于24即可判断是正方体, 如果有零边则不满足条件,但调试了一个半小时还没有ac, 当时有点崩溃,
直到看完别人的题解才发现,只要满足各个边的边长有三种长度即可边长、面对角线长, 体对角线长即可
以下是代码部分

#include 
#include 
using namespace std;
struct node
{
   int x, y, z;
};

int mul(int x)
{
   return x * x;
}

int main()
{
   int t;
   cin >> t;
   while(t--)
   {
       node t[100];
       int k[100], cnt = 0;
       for(int i = 0; i < 8; i++)
           cin >> t[i].x >> t[i].y >> t[i].z;
       for(int i = 0; i < 8; i++)
       {
           for(int j = 0; j < 8; j++)
           {
               if(i == j)
               continue;
               k[cnt++] = mul(t[i].x - t[j].x) + mul(t[i].y - t[j].y) + mul(t[i].z - t[j].z);
           }   
       }
       sort(k, k + cnt);
       int res = 0, ans = 0;
       bool flag = 1;
       for(int i = 0; i < cnt; i++)
       {
           if(k[i] == 0)
           {
               flag = 0;
               break;
           }
           if(ans != k[i])
           {
               ans = k[i];
               res++;
           }
       }
       if(res == 3 && flag)
       cout << "YES\n";
       else
       cout << "NO\n";
   }
   return 0;
}

相关