答案如下:
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
char look1[]="cube";
char look2[]="cylinder";
int n,ok=1;
cin>>n;
int cube1[105]={0},cylinder1[105]={0};
int numcu=0,numcy=0;
for(int i=0;i<n;i++)
{
char temp[10];
cin>>temp;
if(strcmp(temp,look1)==0)
{
cin>>cube1[numcu++];
}
if(strcmp(temp,look2)==0)
{
cin>>cylinder1[numcy++];
}
}
sort(cube1,cube1+numcu,cmp);
sort(cylinder1,cylinder1+numcy,cmp);
int cylinder2[100]={0},inside=0;
for(int i=0;i<numcy;i++)
{
int ok1=0;
if(2*cylinder1[i]<=cube1[numcu-1])
cylinder2[i]=numcu-1;
else
{
for(int j=0;j<numcy;j++)
{
if(2*cylinder1[i]<=cube1[j]&&(1.414*cube1[j+1]<=(2.0*cylinder1[i])))
{
ok1=1;
cylinder2[i]=j;
}
}
if(ok1==0)
{
ok=0;
break;
}
}
}
if(ok==0)
printf("impossible");
else
{
for(int i=numcu-1;i>=0;i--)
{
for(int j=0;j<numcy;j++)
{
if(cylinder2[j]==i)
printf("cylinder %d\n",cylinder1[j]);
}
printf("cube %d\n",cube1[i]);
}
}
return 0;
}