1. 程式人生 > >Gym 101630(NEERC 17) D.Designing the Toy

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\n",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\n",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\n",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\n",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\n",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\n",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\n",x,i,j); 107 } 108 } 109 } 110 } 111 } 112 return 0; 113 }