Gym 101630(NEERC 17) D.Designing the Toy

题目大意:给出三视图方向上分别能看到的正方形数a,b,c(1<=a,b,c<=100),在-100<=x,y,z<=100的范围内构造出满足情况的一种正方体的摆放方式

做法很简单,首先找到a,b,c中的最大值,如果最大值满足小于等于另两个值的乘积,则有解,否则无解;明确这一点之后,便可以将所有正方体平铺在最大值所在的平面上进行构造。

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 
  4 typedef long long ll;
  5 const int mod=1e9+7;
  6 const int maxn=1e5+10;
  7 const int inf=0x3f3f3f3f;
  8 const double eps=1e-14;
  9 const double pi=acos(-1.0);
 10 #define mem(s,v) memset(s,v,sizeof(s))
 11 #define pdd pair<double,double>
 12 #define pii pair<int,int>
 13 
 14 struct node{
 15     int num,id;
 16 };
 17 node a[3];
 18 
 19 int cmp(node x,node y){
 20     return x.num<y.num;
 21 }
 22 
 23 int mp[111][111];
 24 
 25 int main(){
 26     while(~scanf("%d%d%d",&a[0].num,&a[1].num,&a[2].num)){
 27         memset(mp,0,sizeof(mp));
 28         for(int i=0;i<3;++i) a[i].id=i+1;
 29         sort(a,a+3,cmp);
 30         if(a[2].num>a[0].num*a[1].num){
 31             puts("-1");
 32             continue;
 33         }
 34         int j=0;
 35         for(int i=0;i<a[1].num;++i){
 36             if(j<a[0].num){
 37                 mp[i][j]=1;
 38                 j++;
 39             }
 40             else{
 41                 mp[i][j-1]=1;
 42             }
 43         }
 44         int t=a[2].num-a[1].num;
 45         for(int i=0;i<t;++i){
 46             int flag=1;
 47             for(int k=0;k<a[1].num;++k){
 48                 for(int j=0;j<a[0].num;++j){
 49                     if(!mp[k][j]){
 50                         mp[k][j]=1;
 51                         flag=0;
 52                         break;
 53                     }
 54                 }
 55                 if(!flag) break;
 56             }
 57         }
 58         printf("%d
",a[2].num);
 59         int x,y,z;
 60         if(a[2].id==1){
 61             z=0;
 62             if(a[1].id==2){
 63                 for(int i=0;i<a[1].num;++i){
 64                     for(int j=0;j<a[0].num;++j){
 65                         if(mp[i][j]) printf("%d %d %d
",i,j,z);
 66                     }
 67                 }
 68             }
 69             else if(a[1].id==3){
 70                 for(int i=0;i<a[1].num;++i){
 71                     for(int j=0;j<a[0].num;++j){
 72                         if(mp[i][j]) printf("%d %d %d
",j,i,z);
 73                     }
 74                 }
 75             }
 76         }
 77         else if(a[2].id==2){
 78             y=0;
 79             if(a[1].id==1){
 80                 for(int i=0;i<a[1].num;++i){
 81                     for(int j=0;j<a[0].num;++j){
 82                         if(mp[i][j]) printf("%d %d %d
",i,y,j);
 83                     }
 84                 }
 85             }
 86             else if(a[1].id==3){
 87                 for(int i=0;i<a[1].num;++i){
 88                     for(int j=0;j<a[0].num;++j){
 89                         if(mp[i][j]) printf("%d %d %d
",j,y,i);
 90                     }
 91                 }
 92             }
 93         }
 94         else if(a[2].id==3){
 95             x=0;
 96             if(a[1].id==2){
 97                 for(int i=0;i<a[1].num;++i){
 98                     for(int j=0;j<a[0].num;++j){
 99                         if(mp[i][j]) printf("%d %d %d
",x,j,i);
100                     }
101                 }
102             }
103             else if(a[1].id==1){
104                 for(int i=0;i<a[1].num;++i){
105                     for(int j=0;j<a[0].num;++j){
106                         if(mp[i][j]) printf("%d %d %d
",x,i,j);
107                     }
108                 }
109             }
110         }
111     }
112     return 0;
113 }
原文地址:https://www.cnblogs.com/wangcwcgnaw/p/9930172.html